Можно ли захватывать изображения без просмотра текстуры с помощью API Camera 2? - PullRequest
0 голосов
/ 14 февраля 2019

В моем случае мне не нужно показывать предварительный просмотр пользователю, и я хотел бы захватить изображение из сервиса, для достижения этого я использовал ImageFormat .JPG для захвата изображенийно выходные изображения действительно очень темные.Я пробовал эту ссылку в StackOverflow, но она не работает.

val streamConfigurationMap =
                        mCameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) // Available stream configuration.
mPreviewSize = streamConfigurationMap!!.getOutputSizes(ImageFormat.JPEG)[0]
                    mCameraID = cameraId
                    mImageReader =
                            ImageReader.newInstance(mPreviewSize!!.width, mPreviewSize!!.height, ImageFormat.JPEG, 1)
                    mImageReader!!.setOnImageAvailableListener(onImageAvailable, mBackgroundHandler)

Если я использую вид текстуры фиктивной поверхности, получая ошибку ниже, через несколько секунд после запуска приложения

E / BufferQueueProducer: [SurfaceTexture-1-20857-1] cancelBuffer: BufferQueue имеетбыл заброшен

1 Ответ

0 голосов
/ 14 февраля 2019

Прежде всего, вам не нужно использовать TextureView.Причина, по которой ваш предварительный просмотр действительно темный, возможно, из-за вашего CaptureRequest.builder.Вы хотите управлять своей автоматической экспозицией, например, я объясню позже это ниже.

Во-первых, когда вы устанавливаете свою поверхность, вы должны установить ее так:

builder.addTarget(mImageReader.getSurface());

Теперь навопрос яркости, вы можете управлять своим AE следующим образом:

builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());

где getRange ():

private Range<Integer> getRange() {
        CameraCharacteristics chars = null;
        try {
            CameraManager manager = (CameraManager) ((Activity)getContext()).getSystemService(Context.CAMERA_SERVICE);
            chars = manager.getCameraCharacteristics(mCameraId);
            Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
            Range<Integer> result = null;
            for (Range<Integer> range : ranges) {
                int upper = range.getUpper();
                // 10 - min range upper for my needs
                if (upper >= 10) {
                    if (result == null || upper < result.getUpper().intValue()) {
                        result = range;
                    }
                }
            }
            if (result == null) {
                result = ranges[0];
            }
            return result;
        } catch (CameraAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
        mImageReader = ImageReader.newInstance(hardcoded_width, hardcoded_height, ImageFormat.YUV_420_888, 2);
        mImageReader.setOnImageAvailableListener(mVideoCapture, mBackgroundHandler);

Если вы хотите узнать больше о настраиваемой яркости и т. д. Проверьте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...