【问题标题】:Textureview/Surface view for Camera preview - Android用于相机预览的 Textureview/Surface 视图 - Android
【发布时间】:2015-05-29 18:24:00
【问题描述】:

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

谢谢。

【问题讨论】:

  • “我使用 Imageview 来显示预览,它工作正常”——你将什么作为参数传递给 setPreviewDisplay()setPreviewTexture()ImageView 一起使用?
  • 我从相机预览帧创建位图,并使用 setImageBitmap() 方法将其设置为 Imageview。对于来自相机的每一帧,我使用后台处理程序使用此方法更新 Imageview。
  • @user3027732 天哪!
  • 嘿@user3027732 兄弟...我还想要更多的相机预览到单个活动中。[对于相机过滤器,例如iPhone 型相机].. 我需要在更多图像视图中查看更多相机预览,并且所有图像视图都显示为网格/列表视图..请兄弟。帮助我。
  • 我还从相机预览中创建了一个位图,并使用 setImageBitmap() 方法将其设置为 Imageview....但我想要一个 Live Camera Preview 到所有 ImageView.. 我已经在下面问过这个问题链接。请检查一下。如果你知道,请帮助我..(:stackoverflow.com/questions/41392791/…

标签: android android-camera surfaceview


【解决方案1】:

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

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

创建位图很慢,占用 CPU 资源,并且每帧制作多个副本,同时也浪费内存。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多