如何协调相机预览大小和图片大小之间的宽高比差异

got*_*o10 7 camera android surfaceview

我有一个相机应用程序,根据我的布局特征(主要是宽高比)选择预览大小,然后根据其他约束(最小尺寸)选择图片大小.这通常会导致图片的宽高比与预览不同.

这本身不是问题,但我需要将预览中的矩形映射到图片上的等效矩形,以便我可以提取拍摄照片时预览中可见的最终照片的相同区域.

我知道有不同的宽高比意味着将会有一些矩形的部分没有重叠,但我的工作距离不够近,这应该是一个问题.

如果无法直接了解预览和照片地图的方式,是否有可能确定它们如何映射到本机相机?如果我能以编程方式检测本机相机宽高比,我可能能够确定裁剪方案.

got*_*o10 13

经过一些额外的反复试验后,我得出了以下初步结论:

  1. 提供的最大图像大小Camera.Parameters.getSupportedPictureSizes表示相机的原始分辨率.

  2. 其他图片尺寸的内容以及由其提供的预览尺寸Camera.Parameters.getSupportedPreviewSizes将在按比例缩放时与原生内容相匹配Matrix.ScaleToFit.CENTER.(基本上从中心缩放,直到顶部/底部或左/右击中原始分辨率的边界.如果纵横比不匹配,则裁剪发生在未达到原始分辨率边界的维度中

所以,鉴于此,我的解决方案是首先将预览选择矩形缩放到原始相机图片大小.然后,现在我知道原始分辨率的哪个区域包含我想要的内容,我可以执行类似的操作,然后将原始分辨率上的矩形缩放到实际捕获的较小图片Camera.Parameters.setPictureSize.