我想根据 API 将应用程序从 Camera1 扩展到 Camera2。该应用程序的一个核心机制是以每秒约 20 张照片的速度拍摄预览照片。使用 Camera1,我意识到通过创建一个 SurfaceView,在其持有者上添加一个回调,并在创建表面后通过定期 setOneShotPreviewCallbacks 访问预览图片。这非常简单可靠。
现在,在学习 Camera2 时,我“从头到尾”成功地将 YUV420_888 转换为位图(请参阅YUV420_888 到位图转换)。但是我现在正在努力使用“捕获技术”。从 Google 示例中,我看到您需要使用 CameraDevice.TEMPLATE_PREVIEW 进行“setRepeating” CaptureRequest 以显示预览,例如在表面视图上。没事儿。但是,为了拍摄实际照片,我需要使用(这次)builder.addTarget(imageReader.getSurface()) 发出另一个捕获请求。即数据将在 imageReader 的 onImageAvailable 方法中可用。
问题:在我的设备上创建 captureRequest 是一项相当繁重的操作,大约需要 200 毫秒。因此,使用捕获请求(无论是模板 STILL_CAPTUR 还是 PREVIEW)不可能是每秒捕获 20 张图像的可行方法,因为我需要它。我在这里找到的关于 SO 的建议主要基于(教育效率适中)谷歌示例,我不太明白......
我觉得解决方案必须是为 ImageReader 提供连续的预览图片流,可以以给定的频率从那里挑选。有人可以就如何实现这一点提供一些指导吗?非常感谢。