Textureview/Surface 相机预览视图 - Android

Textureview/Surface view for Camera preview - Android

我正在开发 Android 使用相机的应用程序。为了显示相机预览,我观察了很多使用表面视图或纹理视图的示例。 为什么这些比使用 ImageView 显示相机预览更受欢迎? 我已经使用 Imageview 显示预览并且它工作正常。

谢谢。

Why are these preferred over using ImageView to display the camera preview?

效率,也许还有其他原因。

同时使用 SurfaceViewTextureView,底层相机引擎可以通过 GPU 和 OpenGL 引擎更直接地处理输出表面,绕过 Dalvik/ART 运行时。在您的情况下,您强制相机引擎填充 Java byte[],然后将其解码为 Bitmap,然后通过 [=] 更新 UI 14=]。这比使用表面时需要的 CPU 处理和内存消耗要多很多。

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

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

创建位图很慢,CPU-很耗时,而且每个帧都要制作多个副本,也会浪费内存。