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);
凡爲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