如何在处理后手动显示Camera.PreviewCallback中的帧,而不使用Camera.Preview

时间:2010-12-03 14:14:09

标签: android image-processing camera

我已经构建了一个人脸检测应用程序,我从onPreviewFrame获取帧,进行人脸检测,然后在我的surfaceView上方的画布上绘制一个圆圈。问题是当Camera.StartPreview()启动时,使用surfaceview线程自动显示帧。这显然是PreviewCallback启动所必需的。由于处理,面部检测和绘图是在一个单独的线程中完成的(我在这里假设),在显示的帧和该帧的结果之间有2秒的延迟正在处理和绘制在画布上。

我想要做的是停止相机预览显示帧并在处理后自己显示。我相信这有三个好处:

延迟消失。

我可以直接绘制到位图而不是画布,因为你无法撤消你所做的事情,所以它是无用的。

没有两个线程使用相同的图像,这将有助于保持较低的内存消耗。

我读过可以显示来自previewCallback的帧,是否有人知道如何以及如何停止自动显示的帧?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

詹姆斯,我在这里找到了一个解决方案,如果你想停止相机预览,只需注释掉两行(我猜你用CameraPreview.java作为开始) // Camera.setPreviewDisplay(holder); // setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 这意味着摄像头不会使用曲面来显示预览,因此您可以使用回调数据直接显示,但效率非常低,模拟器上只有1fps,但是,我认为这是一个解决方案,并且然后你可以考虑如何更有效地绘制框架

祝你好运,我想知道在这个解决方案之后你是否可以接受:)