android如何处理预览大小/比率与实际SurfaceView大小之间的差异?

时间:2012-01-09 21:05:54

标签: android camera surfaceview image preview

我正在编写一个小型Android应用程序,用户可以在相机的实时预览中放置图像并拍摄照片。然后,应用程序将适当地合并这两个图像 - 所有这一切都正常。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我想弄清楚自己。这是我到目前为止发现的......

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

话虽如此,我仍然在努力让我的VGA录像机在Nexus S上工作,它正在开发LG Maha设备。 :)