2013-05-13 82 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

回答

相關問題