我正在编写一个小型 Android 应用程序,用户可以在其中将图像放入相机的实时预览中并为其拍照。然后,该应用程序将适本地组合两个图像——所有这些都运行良好。
我知道您可以使用 Camera.getParameters() 获取/设置 PreviewSize,我认为这与实时“相机馈送”的大小有关。
但是,显示相机预览的 SurfaceView 的大小与报告的(和使用的)PreviewSizes 不同。例如,在模拟器中我可用的 SurfaceView 恰好是 360x215,而 PreviewSize 是 320x240。不过,整个 SurfaceView 都充满了预览。
但最终生成的图片是(还是?)320x240。 android 如何补偿这些尺寸和宽高比的差异?图片是否被截断?
或者我只是误解了 PreviewSize 的含义 - 这与生成图片的大小有关,还是与投影在 SurfaceView 上的“实时预览”有关?是否有处理此问题的任何重要的相机示例?
我需要知道如何进行转换以最终将图像正确复制/缩放到照片中,因此出现了这些问题。
最佳答案
我正在尝试自己解决这个问题。这是我到目前为止发现的..
- 表面 View 有一个称为
mSurface
的内部表面,它实际上用作相机馈送和编码器馈送。所以这个缓冲区必须是您想要进行录制的实际大小。 - 您可以使用
setFixedSize
方法将此mSurface
的大小设置为独立于SurfaceView
- 现在您可能想要执行高清录制,因此
mSurface
需要 1280x760 分辨率,但您的SurfaceView
不能那么大(假设您在带 WVGA 屏幕的手机)。因此,您尝试设置为比 1280x760 更小的分辨率,同时保持相同的宽高比。 - Android 现在在 HD 缓冲区上执行调整大小以获得预览分辨率,裁剪没有完成,它只是调整到
SurfaceView
分辨率 - 因此此时您为相机设置的
mSurface
和previewSize
具有相同的分辨率,因此生成的视频录制也将具有相同的分辨率.
话虽这么说,我仍在努力让我的 VGA 录像机在 Nexus S 上工作,但它在 LG Maha 设备上工作。 :)
关于android - android 如何处理预览大小/比例和实际 SufaceView 大小之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795209/