编写一个从相机中获取预览帧的应用程序会对其进行一些转换,然后将其显示在屏幕上。
在
public void onPreviewFrame(byte[] data, Camera camera) {}
我把数据做yuv2rgb和另一个线程中的JNI中的一些像素操作。然后我从RGB int数组创建位图并使用
绘制它canvas.drawBitmap(bmp, 0, 0, null);
我在HTC Nexus One上获得了大约15-20FPS的640x480和三星Galaxy S II上的30+ FPS
我想知道我是否可以通过使用Android OpenGL ES进行绘图加快速度? 我会遵循这个指南: http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/
答案 0 :(得分:4)
您是否将SurfaceView用于相机应用程序?您获得的预览框架是屏幕上显示的实际框架的副本。我猜你添加另一个视图来显示回调预览帧。
我不是一个图形人,但你为什么不尝试SurfaceTexture。您可以使用setpreviewtexture()而不是setpreviewwindow()。这样,Camera Service会将缓冲区直接发送到应用程序,而不是制作副本并将其排队到AndroidNativeWindow。这可能会提高您的表现。
这是android Camera app Panorama的工作原理。您可以找到源代码here
答案 1 :(得分:2)
实施OpenGL ES,它确实有助于提高性能