相机预览的Textureview / Surface视图 - Android

时间:2015-05-29 18:24:00

标签: android android-camera surfaceview

我正在开发使用相机的Android应用程序。为了显示相机预览,我观察了许多使用表面视图或纹理视图的示例。 为什么这些优于使用ImageView显示相机预览?我使用Imageview显示预览,它工作正常。

感谢。

2 个答案:

答案 0 :(得分:4)

请不要使用ImageView。这是非常低效的,如果你能用这种方法产生高分辨率预览(1080p),我会感到惊讶。

SurfaceView和TextureView分别直接将零拷贝缓冲区从摄像机驱动程序推送到硬件编写器或GPU。除了需要在目的地进行的最终转换之外,没有额外的缓冲区副本或转换。这大大减少了内存带宽和CPU开销。

创建位图很慢,占用大量CPU,并且每个帧都有几个副本,也浪费了内存。

答案 1 :(得分:1)

  

为什么这些比使用ImageView显示相机预览更受欢迎?

效率,可能还有其他原因。

使用SurfaceViewTextureView,基础相机引擎可以通过GPU和OpenGL引擎更直接地与输出表面一起工作,绕过Dalvik / ART运行时。在您的情况下,您强制相机引擎填写Java byte[],然后您将其解码为Bitmap,然后通过ImageView更新UI。如果你使用表面,这将是一个额外的CPU处理和内存繁忙。