2013-05-13 41 views
0

我在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); 

凡为imgImageView显示处理的缓冲区。

所有这些工作真的很慢。我相信问题的一部分是我如何使用相机。

你能注意到这个问题吗?

谢谢!

+0

刷新ImageView *上的位图是一个非常缓慢的过程,所以我不确定问题来自相机。 – mbrenon 2013-05-14 17:20:51

+0

这么想 - 如何在不使用ImageView的情况下显示图像? – Roman 2013-05-15 10:10:54

+1

如果您的目标是性能,并且您在NDK部分中进行的处理支持大规模并行化,则可以使用硬件加速渲染。不要使用'setPreviewDisplay'显示,而是使用'setPreviewTexture'并在OpenGL着色器中进行处理。 其他选项可以使用[Renderscript](http://developer.android.com/guide/topics/renderscript/compute.html)。我从来没有尝试过,但... – mbrenon 2013-05-15 10:25:22

回答

相关问题