Android Camera2 Basics API

Cod*_*elf 5 android android-camera

我正在从这里阅读有关Android Camera2 API的代码:https: //github.com/googlesamples/android-Camera2Basic

它在这方面令人困惑:https: //github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java#L570-L574

previewRequest构建器仅将表面(即要显示的TextureView)添加为目标.但是以下行实际上将两者都添加为目标.据我了解,这不应该在预览期间触发"OnImageAvailable"Lisenter,不是吗?那么为什么在这里添加图像阅读器的表面呢?

我试图在这里删除这个图像阅读器的表面但是当我真的想拍摄图像时出错了.....

SOOO ConfUSING !!!

rcs*_*ner 10

您需要声明Surface在创建时可能会将图像数据发送到的所有输出CameraCaptureSession.这就是框架的设计方式.

无论何时创建a CaptureRequest,都要添加(列表)目标输出Surface.这是来自捕获的帧的图像数据将来的 - 它可以SurfaceTextureView用于显示,或ImageReader用于保存,或Allocation用于处理等相关联.(A Surface实际上只是可以获取数据输出的缓冲区)通过相机.与缓冲区相关联的对象类型决定了如何访问/使用数据.)

您不必将每个帧的数据发送到所有已注册的Surfaces,但必须将其发送到它们的子集.如果未在创建时注册,则无法将其Surface作为目标添加到a .嗯,你可以,但将它传递给会话将导致崩溃,所以不要.CaptureRequestCameraCaptureSession