gpt4 book ai didi

android - Camera2 可以连续访问相机预览图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:12 27 4
gpt4 key购买 nike

我想根据 API 将应用程序从 Camera1 扩展到 Camera2。该应用程序的一个核心机制在于以每秒约 20 张图片的速度拍摄预览图片。使用 Camera1,我意识到通过创建一个 SurfaceView,在其支架上添加一个回调,并在创建表面后通过定期 setOneShotPreviewCallbacks 访问预览图片。这非常简单可靠。

现在,在研究 Camera2 时,我“从头开始”并设法将 YUV420_888 转换为位图(参见 YUV420_888 to Bitmap Conversion)。但是,我现在正在为“捕获技术”而苦苦挣扎。从 Google 示例中,我看到您需要使用 CameraDevice.TEMPLATE_PREVIEW 进行“setRepeating”CaptureRequest 以显示预览,例如表面上看。那也行。但是,为了拍摄实际照片,我需要使用(这次)builder.addTarget(imageReader.getSurface()) 发出另一个捕获请求。 IE。数据将在 imageReader 的 onImageAvailable 方法中可用。

问题:创建 captureRequest 是一项相当繁重的操作,在我的设备上大约需要 200 毫秒。因此,使用捕获请求(无论是使用模板 STILL_CAPTUR 还是使用 PREVIEW)都不可能成为每秒捕获 20 张图像的可行方法,因为我需要它。我在这里找到的关于 SO 的建议主要基于(教育上效率适中的)Google 示例,我不太明白...

我觉得解决方案必须是向 ImageReader 提供连续的预览图片流,可以按给定的频率从那里挑选图片。有人可以就如何实现这一点提供一些指导吗?非常感谢。

最佳答案

如果您想为每一帧都向预览 SurfaceView 和 YUV ImageReader 发送缓冲区,只需将这两个 Surface 作为目标添加到重复预览请求中。

通常,捕获请求可以针对任何子集(或全部) session 的配置输出目标。

此外,如果您确实只想使用 .capture() 将偶尔的帧捕获到 YUV ImageReader,则不必每次都重新创建捕获请求构建器;只需在同一个构建器上再次调用 .build() ,或者如果您不更改任何设置,则只需重用实际构造的 CaptureRequest 。

即使是偶尔捕获,您也可能希望将预览 Surface 作为目标包含在 YUV 捕获请求中,以便在显示的预览中没有跳过的帧。

关于android - Camera2 可以连续访问相机预览图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36048189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com