Android Camera2:无预览获取原始数据与手动绘制

1星 16 下载量 91 浏览量 更新于2024-08-28 收藏 459KB PDF 举报
"本文主要介绍了如何在Android平台上使用Camera2 API来获取摄像头的原始数据流,以便在不依赖预览显示的情况下进行自定义处理。作者的需求是能够在不预览的情况下获取数据,灵活控制预览的开启和关闭,以及在任何时候保存摄像头图像。文章详细阐述了实现这一目标的技术流程和关键步骤,包括使用ImageReader获取YUV_420_888格式的数据,以及利用libyuv库进行YUV到RGB的数据转换。 首先,Android从API21开始弃用了旧的Camera接口,转而推荐使用Camera2接口。Camera2提供了更高的灵活性,虽然调用更复杂,但能够满足更多定制化的需求。在CamCap程序中,作者取消了通过TextureView预览图像,而是使用ImageReader直接接收CameraCaptureSession传递的图像数据。ImageReader被配置为接收YUV_420_888格式的数据,因为这种格式包含了原始的色彩分量信息。 打开摄像头后,需要创建一个CameraCaptureSession。在这个会话中,设置捕获请求来捕获图像数据。当数据到达ImageReader时,可以触发回调函数,从而获取到每一帧的YUV数据。为了在UI上显示或进一步处理这些数据,需要将其转换为RGB格式,因为Android的Bitmap对象不支持直接存储YUV数据。 在这里,作者选择了libyuv库进行转换,这是一个高性能的跨平台库,专门用于处理YUV和RGB之间的转换。将YUV数据转换为RGB后,可以创建Bitmap对象,进而可以在TextureView上进行绘制。如果需要提高性能,还可以选择使用OpenGL ES直接处理原始数据,但这超出了本文的范围。 通过Camera2 API和libyuv库,开发者可以实现对Android摄像头原始数据的精确控制,不仅能够灵活地管理预览状态,还能在后台处理图像数据,为各种高级应用提供基础。在实际开发中,理解这些技术细节对于创建自定义的摄像头应用至关重要。"