Как установить Android Camera2 на соотношение 18,5: 9

Я пытаюсь внедрить камеру 2 в свое приложение на Samsung Note 8, однако изображение в предварительном просмотре деформируется.

Размер превью: 2220x1080 (соотношение 18,5: 9)
Размер камеры: 1920x1080 (соотношение 16: 9)

Вроде под размер картинки от 1920х1080 до 2220х1080

как предварительно просмотреть и захватить изображение в полноэкранном режиме (2220x1080)?

public void createCameraPreviewSession() {
    try {
        SurfaceTexture texture = this.getSurfaceTexture();
        assert texture != null;
        texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
        Surface surface = new Surface(texture);
        previewBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        previewBuilder.addTarget(surface);
        cameraDevice.createCaptureSession(Arrays.asList(surface, reader.getSurface()),
                new CameraCaptureSession.StateCallback() {
                    @Override
                    public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                        if (null == cameraDevice) {
                            return;
                        }
                        previewSession = cameraCaptureSession;
                        thread = new HandlerThread("CameraPreview");
                        thread.start();
                        backgroundHandler = new Handler(thread.getLooper());
                        try {
                      previewBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
              previewSession.setRepeatingRequest(previewBuilder.build(), null, backgroundHandler);
                        } catch (CameraAccessException e) {
                            e.printStackTrace();
                        }
                    }
                    @Override
                    public void onConfigureFailed(
                            @NonNull CameraCaptureSession cameraCaptureSession) {
                    }
                }, null
        );
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}
2
0
976
1

Ответы 1

Galaxy Note 8 - одно из многих устройств, в которых камера не поддерживает размер кадра, который точно соответствовал бы экрану. Обычным решением для этого является 'заниматься боксом': подготовьте макет экрана с некоторыми черными полями и прямоугольной поверхностью, которая соответствует желаемому соотношению сторон кадра предварительного просмотра. API камеры2 автоматически масштабирует кадр предварительного просмотра, чтобы он соответствовал поверхности размер, но результат будет искажен, если соотношения сторон не совпадают.

Другой подход - сделать предварительный просмотр 'обрезать' так, чтобы он соответствовал размеру экрана (опять же, мы говорим о соотношении сторон, а не о количестве пикселей). Это проще сделать через TextureView, а не через поверхность. В Полноэкранный предварительный просмотр camera2Basic Example Project вы можете найти, как это можно закодировать.

См. Также Изображение захвата Android Camera2 перекошено, в котором конкретно обсуждаются некоторые проблемы с размерами кадра camera2 на некоторых устройствах Samsung.

кстати, у них есть 18,5: 9, доступное в стандартном приложении камеры, они просто фальсифицируют его с помощью матричных преобразований?

urSus 17.08.2018 18:52

@urSus Я считаю, что стандартное приложение использует бокс

Alex Cohn 18.08.2018 17:18

на Note 8 он полон

urSus 21.08.2018 03:41

Другие вопросы по теме