添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在图像阅读器Camera2中传递捕获信息

8 人关注

我正在使用camera2 API来捕捉手动曝光和ISO的图像。但有时捕获的图像的ISO和曝光值与我所指定的不同。

我是否有办法将我在捕获请求中设置的值的信息传递给图像读取器? 当图像被捕获时回调,以查看图像是否真的具有我指定的值。

我正在捕捉大量的图像(比如说一个循环),每张图像的ISO和曝光值都不同。

这是我捕捉图像的代码。

imageReader = ImageReader.newInstance(imageWidth, imageHeight, ImageFormat.JPEG, 1);
imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
        @Override
        public void onImageAvailable(ImageReader imageReader) {
            /// How to check the image is taken with correct values
    }, backgroundHandler);
captureRequest = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureRequest.addTarget(preview);
captureRequest.addTarget(imageReader.getSurface());
captureRequest.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
captureRequest.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_OFF);
captureRequest.set(CaptureRequest.SENSOR_SENSITIVITY, <MANUAL_ISO>);
captureRequest.set(CaptureRequest.SENSOR_EXPOSURE_TIME, <MANUAL_EXPOSURE>);
mSession.capture(captureRequest.build(), null, backgroundHandler);

这在大多数情况下是有效的,比如我拍摄100张照片,那么大约有70张是按照我指定的数值拍摄的,其余的30张会有不同的数值。

我尝试了什么。

我尝试了以下方法,当我捕获图像时,我检查onCaptureCompleted中的值,并创建一个队列,指示图像是否以正确的值被捕获。但是当我在imageReader中获取图像时,我不知道队列中的值是针对当前图像还是其他图像。这是因为我不知道imageReader的监听器何时会被调用。它可能在onCaptureCompleted完成后或之前被调用,或者在最坏的情况下,在onCaptureCompleted被调用2-3次后,因为我在循环中捕获图像。

基本上我需要一个标签来识别这种方式的图像,但我不知道如何做。

以下是同样的代码。

class CapturedPicture {
    static Queue<Boolean> iso = new LinkedList<>();
mSession.capture(captureRequest.build(), new CameraCaptureSession.CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
                super.onCaptureCompleted(session, request, result);
                int capturedISO = result.get(CaptureResult.SENSOR_SENSITIVITY);
                CapturedPicture.iso.add(<MANUAL_ISO> == capturedISO);
        }, backgroundHandler);

所以我需要一种方法将信息传递给imageReader监听器,以表明当前图像是否符合我指定的设置。 希望得到任何帮助。