安卓camera2曝光问题。使用 YUV ImageReader 时预览会曝光过度

标签 android image android-camera nexus-5 android-camera2

Nexus 5x 上出现非常奇怪的问题。

我有一组用于相机应用程序的普通表面: - 用于屏幕预览的 SurfaceHolder - YUV 格式的 ImageReader 用于预览帧数据 - YUV 或 JPEG 格式的 ImageReader(取决于所选的内部应用程序模式)用于捕获静态图像。

当使用 JPEG ImageReader 配置 captureSession 时,一切正常,屏幕预览正常显示。 但是,当使用 YUV ImageReader 时,根据构图,屏幕预览可能会曝光过度。 我必须注意,曝光测光区域设置为传感器的整个 activeRect。

查看以下屏幕截图:

  1. 正常曝光预览。使用 JPEG ImageReader。 NORMAL EXPOSED PREVIEW. JPEG ImageReader is used

  2. 预览曝光过度。使用YUV ImageReader。 enter image description here

3&4。 JPEG 和 YUV 图像读取器。对于这两种情况,现在通常会暴露一些其他构图和预览。 enter image description here enter image description here

最佳答案

终于找到这个bug的原因了!

您会感到惊讶,但该错误是由捕获 session 的表面列表强制的。更具体地说,是表面到列表中的添加顺序! 如果首先添加相机预览表面 (SurfaceHolder),则一切正常:

    // prepare list of surfaces to be used in capture requests
    List<Surface> sfl = new ArrayList<Surface>();

    sfl.add(mCameraSurface); // surface for viewfinder preview

    sfl.add(mPreviewImageReader.getSurface()); //preview data
    sfl.add(mImageReader.getSurface()); // surface for image capture

    // configure camera with all the surfaces to be ever used
    camDevice.createCaptureSession(sfl, new sessionListener(), null);

但是当它最后添加时,我们遇到了这个错误 - 预览曝光过度!

// prepare list of surfaces to be used in capture requests
    List<Surface> sfl = new ArrayList<Surface>();

    sfl.add(mPreviewImageReader.getSurface()); //preview data
    sfl.add(mImageReader.getSurface()); // surface for image capture

    sfl.add(mCameraSurface); // surface for viewfinder preview

    // configure camera with all the surfaces to be ever used
    camDevice.createCaptureSession(sfl, new sessionListener(), null);

这让我大吃一惊!

关于安卓camera2曝光问题。使用 YUV ImageReader 时预览会曝光过度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36859673/

相关文章:

android - 支持 Android 的硬 float 的 OpenCV

java - 每次调用 "Camera camera = Camera.open();"时 Android 都会抛出错误

android - 无法解析 ':app@debug/compileClasspath' : Could not resolve androidx 的依赖关系

android - 倒计时器未取消

javascript - jQuery:如何使用 img.attr ('src' , 'img.png' )为图像源的变化设置动画(淡入淡出)?

c# - 去斑 - 从图像中去除 Blob 或点

html - CSS:如何裁剪任意大小的图像?

android - 像 360 全景一样自动捕捉图像

Android Canvas 在相机上画线

android - 如何在mysql-android中插入图像