使用Android Camera2 API快速捕获闪光/非闪光图像

时间:2016-03-02 07:40:44

标签: android android-camera android-camera2

当用户按下捕获按钮时,我正在编写一个Android应用程序来快速捕获flash / no-flash图像对。为了编写我的应用程序,我引用了Camera2Basic应用程序here

从Android文档中,我发现要启动闪存,预览请求构建器应将 AE_MODE 设置为 AE_MODE_ON_ALWAYS_FLASH

我正在使用三个请求构建器:预览 noflash flash 三者之间的区别是:

  • 预览:AE_MODE设置为AE_MODE_ON_ALWAYS_FLASH,AF_MODE设置为CONTROL_AF_MODE_CONTINUOUS_PICTURE

  • noflash :AE_MODE设置为AE_MODE_ON

  • 闪存:AE_MODE设置为AE_MODE_ONALWAYS_FLASH

我正在使用 Nexus 5 设备,我发现要捕获一个Flash图像,必须有如上所述的预览构建器和Flash构建器,并使用上面的提交静态捕获请求flash 构建器。使用此序列,我 始终 在Nexus 5中获得正确的闪存图像。预闪为 始终 处理。

回到原始问题,拍摄一对闪光/不闪光图像,我的步骤顺序如下:

  1. 在拍摄照片中,我使用预览构建器启动自动对焦触发。

  2. 自动对焦完成后,我使用 noflash flash 构建器( 第一个noflash)背靠后提交两个静态捕获请求,然后闪光

  3. 但是,我得到的 第一个 图片是 flash图片 无闪存图片 。我不明白这种产出的逆转。

    1. JPEG案例 第一个图片 始终 正确的Flash图片 第二图片 始终 正确的无闪存图片 如下图所示:
    2. 与使用 noflash 构建器提交的请求相对应的Flash图像: enter image description here

      与使用 flash 构建器提交的请求相对应的非Flash图像: enter image description here

      1. YUV_420_888案例:与JPEG相同,但 noflash图片永远不会正确 。人们可以注意到右侧的 白色条 以及不正确的颜色,也非常 嘈杂 !< / LI>

        与使用 noflash 构建器提交的请求相对应的Flash图像: enter image description here

        与使用 flash 构建器提交的请求相对应的

        不正确的无闪存 图像: enter image description here

        偏离正轨,因为在YUV_420_888格式中,两张图像背靠背拍摄,我在其间添加预览请求以防止溢出。

        我的问题是:

        1. 为什么输出图像的顺序颠倒了?

        2. 为什么YUV_420_888格式的无闪光图像不合适?

        3. 请帮忙。

1 个答案:

答案 0 :(得分:1)

确认一些事项:

  1. 确保触发器仅针对单个请求设置为START,而不是连续
  2. 如果AE_MODE是AE控制闪烁的那个之一,则忽略FLASH_MODE;最好不要碰它,以防无论如何。
  3. 确保使用STILL_CAPTURE请求模板进行最终捕获请求;否则主闪光灯不会发射。
  4. 您应该能够在闪光请求之后立即提交第二个无闪光的STILL_CAPTURE请求(为了安全起见,留下一个缓冲请求,因为由于滚动快门,主闪光灯可能在前一帧可见部分可见闪光捕获后);只需提交预览请求,然后使用AE_MODE_ON提交STILL_CAPTURE请求。
  5. 为获得最高速度,请勿捕获JPEG图像;额外的编码时间可能导致图像之间的延迟。使用YUV_420_888并自己创建JPEG。