使用Android L和Camera2 API处理相机预览图像数据

我正在开发一个Android应用程序,它正在处理来自摄像头的输入图像并将其显示用户.这很简单,我使用setPreviewCallbackWithBuffer在相机对象上注册一个PreviewCallback.
使用旧的相机API,这很容易并且运行顺畅

public void onPreviewFrame(byte[] data, Camera cam) {
    // custom image data processing
}

我正在尝试移植我的应用程序以利用新的Camera2 API,我不确定我该怎么做.我在L预览示例中使用了Camera2Video,可以录制视频.但是,样本中没有直接的图像数据传输,因此我不明白应该在何处获取图像像素数据以及如何处理它.

有人可以帮我或建议如何在Android L中获得PreviewCallback的功能,或者如何在将其显示到屏幕之前处理相机的预览数据? (相机对象上没有预览回调)

谢谢!

解决方法:

由于Camera2 API与当前的Camera API非常不同,因此阅读文档可能会有所帮助.

一个很好的起点是camera2basic示例.它演示了如何使用Camera2 API并配置ImageReader来获取JPEG图像并注册ImageReader.OnImageAvailableListener以接收这些图像

要接收预览帧,您需要将ImageReader的表面添加到setRepeatingRequest的CaptureRequest.Builder.

此外,您应该将ImageReader的格式设置为YUV_420_888,这将在8MP时为您提供30fps(Nexus 5的文档保证在8MP时为30fps).

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...