Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Camera2可连续访问相机预览图像_Android_Preview_Capture_Camera2 - Fatal编程技术网

Android Camera2可连续访问相机预览图像

Android Camera2可连续访问相机预览图像,android,preview,capture,camera2,Android,Preview,Capture,Camera2,我想根据API将应用程序从Camera1扩展到Camera2。该应用程序的一个核心机制是以每秒20张的速度拍摄预览照片。使用Camera1,我意识到通过创建SurfaceView,在其支架上添加回调,并在创建曲面后通过定期setOneShotPreviewCallbacks访问预览图片。这是相当容易和可靠的 现在,在学习Camera2时,我“从最后”开始,并设法将YUV420_888转换为位图(请参阅)。然而,我现在正在为“捕捉技术”而挣扎。从Google示例中,我看到您需要使用CameraDe

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

现在,在学习Camera2时,我“从最后”开始,并设法将YUV420_888转换为位图(请参阅)。然而,我现在正在为“捕捉技术”而挣扎。从Google示例中,我看到您需要使用CameraDevice.TEMPLATE_预览创建“setRepeating”CaptureRequest以显示预览,例如在曲面视图上。那很好。但是,为了拍摄实际的照片,我需要(这次)使用builder.addTarget(imageReader.getSurface())发出另一个捕获请求。即,数据将在imageReader的onImageAvailable方法中可用

问题是:在我的设备上创建captureRequest是一个相当繁重的操作,大约需要200毫秒。因此,使用捕获请求(无论是模板静止捕获还是预览)不可能是每秒捕获20幅图像的可行方法,因为我需要它。我在这里找到的建议主要是基于(教育上中等效率)谷歌的例子,我真的不太明白


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

如果要为每帧向预览表面视图和YUV ImageReader发送缓冲区,只需将两个表面作为目标添加到重复预览请求中即可

一般来说,捕获请求可以针对数据的任何子集(或全部) 会话的配置输出目标

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


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

抱歉,忘记添加android标记。您是否能够解决此问题。谢谢Eddy,这非常有帮助,听起来是一种直观的方法。然而,为了有效地实现它,我认为有必要更详细地研究Camera2,因为还有许多方面我不了解(例如线程的作用)。我会回到这里,接受你的答案,并希望能够发布一些代码,帮助其他人也。也许在那之前我会有一些后续问题。。。再次感谢。我快要放弃了。每次我将imageReader添加为附加目标时,要么预览不再可见,要么出现崩溃“无法使用未配置的曲面”。我也花了很多时间寻找通过imagereader(我认为这是一个相当基本的应用程序)获取预览图片的完整示例,但我没有找到任何示例。我试图尽可能地简化谷歌的例子,但它仍然太复杂,无法评估各个部分对我的问题的相关性……很抱歉听到这个消息。“无法使用未配置的曲面”表示未将ImageReader曲面作为CameraDevice.createCaptureSession参数的一部分。您需要两个曲面作为createCaptureSession的参数,然后作为使用setRepeatingRequest提交的CaptureRequest的参数。一个重要的细节:确保在处理完图像后立即关闭从ImageReader接收的图像;否则一切都会停滞(读卡器中有固定数量的缓冲区,如果无法填充空的缓冲区,相机就会停止)。这就是丢失的链接!唯一的问题确实是我没有将ImageReaders的表面添加到mCameraDevice.createCaptureSession()的Arrays.asList(…)参数中。。。。很容易。谢谢你,艾迪!现在我真的很期待与Camera2合作!