如何使用Android摄像头与一些图像处理
问题描述:
我在Android上构建应用AR与一些图像处理来改善,我处理镜头的方式是创建一个伪造的表面:如何使用Android摄像头与一些图像处理
SurfaceView view = new SurfaceView(context);
camera.setPreviewDisplay(view.getHolder());
然后使用setPreviewCallbackWithBuffer
获取相机缓冲区并使用System.arraycopy(data, 0, Buffer.m_data, 0, data.length);
将缓冲区发送到某个共享缓冲区,其中Buffer.m_data
与我的主要活动共享。
在我的主要活动我会运行一个循环,获取共享缓存,它发送到我的NDK的代码,把它找回来,然后显示其作为图像:
if(m_bitmap == null){
m_bitmap = Bitmap.createBitmap(m_width, m_height, Bitmap.Config.ARGB_8888);
}
m_bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(m_imData.m_data));
img.setImageBitmap(m_bitmap);
凡为img
是ImageView
显示处理的缓冲区。
所有这些工作真的很慢。我相信问题的一部分是我如何使用相机。
你能注意到这个问题吗?
谢谢!
刷新ImageView *上的位图是一个非常缓慢的过程,所以我不确定问题来自相机。 – mbrenon 2013-05-14 17:20:51
这么想 - 如何在不使用ImageView的情况下显示图像? – Roman 2013-05-15 10:10:54
如果您的目标是性能,并且您在NDK部分中进行的处理支持大规模并行化,则可以使用硬件加速渲染。不要使用'setPreviewDisplay'显示,而是使用'setPreviewTexture'并在OpenGL着色器中进行处理。 其他选项可以使用[Renderscript](http://developer.android.com/guide/topics/renderscript/compute.html)。我从来没有尝试过,但... – mbrenon 2013-05-15 10:25:22