Android相机预览映射到最终的图片

我们一直在构build一个定制的Android相机Activity,其中一个矩形覆盖在相机预览中,当捕获照片(按下button)时,我们要裁剪最终图像的对应矩形区域。 问题是,我们还没有弄清楚android如何将预览屏幕映射到最终的图像。

我们尝试了下面的公式,但只适用于某些情况:

设x和y为矩形左上angular的坐标,如相机预览所示。

让preview_width和preview_height是相机预览的宽度和高度。 这些是得到使用getBestPreviewSize()函数,循环通过支持的预览大小,并select较大的一个。 假设他们是1280和720。

让picture_width和picture_height成为相机所支持的最终图片的宽度和高度。 对于我们的目的,假设这是1632 * 1224(在索尼爱立信XPERIA这相当于2 MP)。

我们想要findx_map,y_map,这是最终图像的裁剪矩形的x和y。

然后用类比法则,我们使用的公式是:

x_map = picture_width * x / preview_width; y_map = picture_height * y / preview_height;

但是,这似乎并不适用于所有情况。 我们发现,当手机的屏幕尺寸与预览尺寸相似时,这个公式几乎可以工作(近似,误差很小)。

但对于其他情况下,如索尼XPERIA手机屏幕尺寸是:宽度:480和高度:854,公式失败。

例如,对于x = 50,则x_map = 1632 * 50/1280 = 63.75然而,如从最终图片裁剪的矩形区域所示,该数字并不真正对应于预览区域中的矩形。 它走了。 我们的公式没有考虑到屏幕尺寸,尽pipe试图修改屏幕尺寸,并没有产生任何理想的结果。

我们怀疑,预览大小和最终图片之间的映射不知怎么考虑了屏幕尺寸,但还没有弄清楚到底是什么,因为没有文档,广泛searchnetworking上的答案后,没有什么相关的。 我们认为在应用类比法则之前,我们需要考虑到一定的比例因子和纵横比,因为公式工作的很好。

你知道上述的一个正确的公式吗?

Solutions Collecting From Web of "Android相机预览映射到最终的图片"

首先,获取由Camera.getSupportedPictureSizes返回的最大图片尺寸 – 这是您的相机的原始分辨率,您可以从中确定原始纵横比。 任何图片尺寸或不同宽高比的预览尺寸将根据Matrix.ScaleToFit.CENTER进行裁剪。

另见: https : //stackoverflow.com/a/18159351/994834