Захват изображения в Camera2 Api после масштабирования

пытаясь использовать camera2 api, требуется функциональность, в которой пользователь может касаться / разворачивать, чтобы увеличивать и уменьшать масштаб.

Использовал этот код для масштабирования

                CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
                CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
                float maxzoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)) * 10;
                Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

                int minW = (int) (m.width() / maxzoom);
                int minH = (int) (m.height() / maxzoom);
                int difW = m.width() - minW;
                int difH = m.height() - minH;
                int cropW = 0, cropH = 0;
                if (!touchFlagForZoom) {
                    cropW = difW / 100 * (int) 25;
                    cropH = difH / 100 * (int) 25;
                    touchFlagForZoom = true;

                } else {
                    cropW = difW / 100 * (int) 0;
                    cropH = difH / 100 * (int) 0;
                    touchFlagForZoom = false;

                }
                cropW -= cropW & 3;
                cropH -= cropH & 3;
                Rect zoom = new Rect(cropW, cropH, m.width() - cropW, m.height() - cropH);
                captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);


                try {
                    cameraCaptureSessions
                            .setRepeatingRequest(captureRequestBuilder.build(), null, null);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                } catch (NullPointerException ex) {
                    ex.printStackTrace();
                }

Проблема. Он отлично работает для предварительного просмотра, но когда я снимал изображение после увеличения, я получал немасштабированное растровое изображение.


person Mohsin    schedule 02.10.2017    source источник


Ответы (1)


Вы устанавливаете тот же регион кадрирования в своем запросе на фотосъемку?

Область кадрирования задается для каждого кадра, поэтому, если вы используете область кадрирования по умолчанию в запросе фотосъемки, вы получите полный FOV, а не масштабирование.

person Eddy Talvala    schedule 02.10.2017