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

android–Camera2可以连续访问相机预览图像,第1张

概述我想根据API将应用程序从Camera1扩展到Camera2.该应用程序的一个核心机制是以每秒约20张照片的速度拍摄预览图片.使用Camera1,我意识到通过创建一个SurfaceView,在其持有者上添加一个Callback,并在创建通过周期性setOneShotPreviewCallbacks访问预览图片的表面之后.这非常简单可靠.

我想根据API将应用程序从Camera1扩展到Camera2.该应用程序的一个核心机制是以每秒约20张照片的速度拍摄预览图片.使用Camera1,我意识到通过创建一个SurfaceVIEw,在其持有者上添加一个Callback,并在创建通过周期性setoneshotPrevIEwCallbacks访问预览图片的表面之后.这非常简单可靠.

现在,在研究Camera2时,我“从最后”开始并设法将YUV420_888转换为Bitmap(见YUV420_888 to Bitmap Conversion).但是我现在正在努力使用“捕获技术”.从Google示例中我看到您需要使用CameraDevice.TEMPLATE_PREVIEW进行“setRepeating”CaptureRequest以显示预览,例如在表面视图上.那也行.但是,为了获取实际图片,我需要使用(此时)builder.addTarget(imageReader.getSurface())进行另一个捕获请求.即数据将在imageReader的onImageAvailable方法中可用.

问题是:captureRequest的创建是一个相当繁重的 *** 作,在我的设备上花费大约200ms.因此,捕获请求(无论是使用模板STILL_CAPTUR还是PREVIEW)的使用不可能成为每秒捕获20个图像的可行方法,因为我需要它.我在SO上找到的提案主要是基于(教育上适度有效的)Google示例,我不太明白……

我觉得解决方案必须是为ImageReader提供一系列预览图片,这些图片可以在给定频率下从那里选取.有人可以就如何实现这个提供一些指导吗?非常感谢.

解决方法:

如果要为每个帧向预览SurfaceVIEw和YUV ImageReader发送缓冲区,只需将两个Surfaces作为目标添加到重复预览请求中.

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

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

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

总结

以上是内存溢出为你收集整理的android – Camera2可以连续访问相机预览图像全部内容,希望文章能够帮你解决android – Camera2可以连续访问相机预览图像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1100017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存