【发布时间】:2014-10-17 05:00:21
【问题描述】:
我正在开发一个 android 应用程序,该应用程序正在处理来自相机的输入图像并将其显示给用户。这很简单,我在相机对象上注册了一个PreviewCallback 和setPreviewCallbackWithBuffer。
这很简单,并且可以与旧的相机 API 顺利配合
public void onPreviewFrame(byte[] data, Camera cam) {
// custom image data processing
}
我正在尝试移植我的应用程序以利用新的 Camera2 API,但我不确定我应该怎么做。我遵循了 L Preview 示例中的 Camera2Video,它允许录制视频。但是,样本中没有直接的图像数据传输,所以我不明白我到底应该从哪里获取图像像素数据以及如何处理它。
任何人都可以帮助我或建议如何在android L中获得PreviewCallback的功能,或者如何在将其显示到屏幕之前处理来自相机的预览数据? (相机对象上没有预览回调)
谢谢!
【问题讨论】:
-
你解决了这个问题。
-
是的,我做到了。检查 VP 的响应以及来自 android 示例的 Camera2Basic 和 Camera2Video。您需要创建一个 ImageReader 并在捕获时使用
setOnImageAvailableListener获取新图像。为了绘制图像,我创建了渲染纹理的 OpenGL 表面和将YUV_420_888转换为RGB的着色器。 -
谢谢,我已经检查了 repos 和 VP 的回复。当我设置 addTarget(mImageReader.getSurface());它在冻结预览之后只提供三帧 onImageAvailable。
-
当您不从 ImageReader 读取/关闭图像时,可能会发生这种情况(或类似情况)。确保在侦听器
onImageAvailable(...)中您确实阅读并关闭了图像。 Listener 不能为空,即使您不使用需要读取的图像(例如使用reader.acquireNextImage())。 -
谢谢@bubo。我花了一段时间才弄清楚这种行为,因为文档中没有提到它。
标签: android image-processing camera preview android-5.0-lollipop