【问题标题】:How does android handle differences between preview size/ratio and actual SufaceView size?android 如何处理预览大小/比例和实际 SufaceView 大小之间的差异?
【发布时间】:2012-02-06 09:19:34
【问题描述】:

我正在编写一个小型 android 应用程序,用户可以在其中将图像放置在相机的实时预览中并拍照。然后,该应用程序将适当地组合这两个图像——所有这些都可以正常工作。

我知道您可以使用 Camera.getParameters() 获取/设置 PreviewSize,我认为这与实时“相机馈送”的大小有关。

但是,显示相机预览的 SurfaceView 的大小与报告的(和使用的)PreviewSizes 不同。例如,在模拟器中,我可用的 SurfaceView 恰好是 360x215,而 PreviewSize 是 320x240。尽管如此,整个 SurfaceView 都充满了预览。

但最终生成的图片是(也是?)320x240。 android 如何弥补这些尺寸和纵横比的差异?图片被截断了吗?

或者我只是误解了 PreviewSize 的含义 - 这与生成图片的大小有关,还是与投影在 SurfaceView 上的“实时预览”有关?是否有任何重要的相机示例可以处理这个问题?

我需要知道如何进行转换,最终将图像正确复制/缩放到照片中,因此有这些问题。

【问题讨论】:

标签: android camera surfaceview image preview


【解决方案1】:

我正在尝试自己解决这个问题。这是我到目前为止发现的..

  • 表面视图有一个称为mSurface 的内表面,它实际上用作相机馈送和编码器馈送。因此,此缓冲区必须是您想要进行记录的实际大小。
  • 您可以使用setFixedSize 方法将此mSurface 的大小设置为独立于SurfaceView
  • 现在您可能想要执行高清录制,因此mSurface 需要 1280x760 分辨率,但您的SurfaceView 不能那么大(假设您在具有 WVGA 屏幕的手机上运行它)。因此,您尝试将分辨率设置为比 1280x760 更小的分辨率,同时保持相同的纵横比。
  • Android 现在会调整 HD 缓冲区的大小以获得预览分辨率,但未完成裁剪,只是将大小调整为 SurfaceView reoslutions
  • 因此此时您为相机设置的mSurfacepreviewSize 的分辨率相同,因此生成的视频录制也将具有相同的分辨率。

话虽如此,我仍在努力让我的 VGA 刻录机在 Nexus S 上运行,它在 LG Maha 设备上运行。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2011-02-09
    • 2019-02-22
    • 2022-01-03
    • 2015-10-18
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多