4

编写一个从相机获取预览帧的应用程序对其进行一些转换,然后将其显示在屏幕上。

public void onPreviewFrame(byte[] data, Camera camera) {}

我将数据在另一个线程中的 JNI 中进行 yuv2rgb 和一些像素操作。然后我从 RGB int 数组创建位图并使用

canvas.drawBitmap(bmp, 0, 0, null);

我在 HTC Nexus One 上以 640x480 获得大约 15-20FPS,在三星 Galaxy S II 上获得 30+ FPS

我想知道是否可以通过使用 Android OpenGL ES 进行绘图来加快速度?我会遵循本指南: http: //obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

4

2 回答 2

4

您是否将 SurfaceView 用于您的相机应用程序?您获得的预览帧是屏幕上显示的实际帧的副本。我猜你添加了另一个视图来显示回调预览帧。

我不是图形专家,但你为什么不试试SurfaceTexture。您可以使用 setpreviewtexture() 代替 setpreviewwindow()。这样,Camera Service 将直接将缓冲区发送到应用程序,而不是制作副本并将其排队到 AndroidNativeWindow。这可能会提高你的表现。

这就是安卓相机应用全景的工作方式。你可以在这里找到源代码

于 2012-07-04T06:41:18.060 回答
2

实现了 OpenGL ES,它确实有助于提高性能

于 2012-07-24T07:19:21.327 回答