Android SDK:获取原始预览相机图像而不显示它

Daw*_*aha 20 android

我想用原始图像进行图像处理而不在屏幕上显示,这显然会降低性能.

根据这个线程的答案从相机拍摄照片没有预览,这在Android 1.5中是不可能的,但有人知道它是否可以在Android 4(API级别15)?

Edd*_*ala 45

在Android 4中,接收原始图像数据而不在屏幕上显示它的最简单选项是使用Camera.setPreviewTexture()调用将预览帧路由到GPU.

您可以通过两种方式使用它:

  1. 在GPU上进行实际处理:设置OpenGL上下文(OpenGL ES 2教程),并在该上下文中创建SurfaceTexture对象.然后将该对象传递给setPreviewTexture,并开始预览.然后,在OpenGL代码中,您可以调用SurfaceTexture.updateTexImage,并且与SurfaceTexture关联的纹理ID将更新为相机的最新预览帧.如果需要,您还可以使用glReadPixels将RGB纹理数据回读到CPU以进行进一步处理.
  2. 在CPU上进行处理:您可以简单地创建一个虚拟SurfaceTexture对象,而无需设置任何OpenGL上下文.将任何所需的整数作为纹理ID传递,并使用setPreviewTexture将SurfaceTexture连接到相机.只要您不调用updateTexImage,SurfaceTexture就会丢弃相机传入其中的所有数据.然后使用setPreviewCallback设置预览回调,并使用该数据(通常采用YUV格式)进行CPU处理.这可能不如#1效率低,但不需要知道OpenGL.