Я строй приложения AR на Android с некоторой обработкой изображений, как я обращаться с камерой, что я создаю поддельную поверхность:Как улучшить с помощью 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
Мысль так: как бы вы показывали изображение без использования ImageView? – Roman
Если вы нацелены на производительность, и если обработка, которую вы делаете в части NDK, поддерживает массивную параллелизацию, вы можете использовать аппаратное ускорение рендеринга. Вместо отображения с помощью 'setPreviewDisplay' используйте' setPreviewTexture' и выполняйте обработку в шейдере OpenGL. Другим вариантом может быть использование [Renderscript] (http://developer.android.com/guide/topics/renderscript/compute.html). Я никогда не пробовал, хотя ... – mbrenon