【问题标题】:Capturing image without making preview choppy using Camera 2 API使用 Camera 2 API 捕获图像而不使预览不连贯
【发布时间】:2018-07-03 04:39:56
【问题描述】:

我正在尝试修改基本的 Camera2 API 示例 (https://github.com/googlesamples/android-Camera2Basic),使其每 x 秒拍摄一张照片(然后在后台线程上处理它;我什至不需要将图像保存到磁盘),同时显示流畅的预览。不幸的是,在捕获会话中调用 capture() 会使预览冻结一两秒,从而导致用户体验不佳。

有没有办法直接进入预览表面并读取图像字节?我不在乎图像质量,流畅的用户体验是优先考虑的。

【问题讨论】:

    标签: android android-camera android-camera2


    【解决方案1】:

    如果摄像头设备是LEGACY 级别的设备,这很遗憾。

    即使是 LIMITED 设备,相机也必须支持 BURST_CAPTURE 功能,以保证快速捕获全分辨率。所有 FULL 级或更好的设备都支持 BURST_CAPTURE。

    但是,即使在功能较低的设备上,您通常也可以流畅地以视频录制分辨率捕获未压缩的 YUV 帧。这意味着将具有 YUV_420_888 格式的ImageReader 添加到您的会话配置中,然后处理由此产生的图像。遗憾的是 LEGACY 设备上的 JPEG 总是很慢,并且一些 LEGACY 设备也没有足够的 CPU 能力来顺利生成 YUV 数据(因为必须在后台进行一些转换)。

    更多细节,您可以检查StreamConfigurationMap 的输出,并查看在最短 1/30 秒的帧持续时间下运行的输出 YUV 分辨率;这些应该保证有限或更好的设备的平稳运行。

    【讨论】:

    • 谢谢,YUV_420_888 在这个设备上运行非常流畅。如果有人想使用这种方法,这是将原始 YUV 图像从相机转换为位图的另一个很好的答案:stackoverflow.com/a/40152147/345048
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2020-04-06
    • 2012-04-20
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多