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

Fot*_*zis 9 mapping camera android image preview

我们一直在构建自定义Android相机活动,其中矩形被覆盖在相机预览内部,并且当捕获照片时(按下按钮),我们想要裁剪最终图像的相应矩形区域.问题是我们还没有弄清楚android如何将预览屏幕映射到最终图像.

我们尝试了以下公式,但仅在某些情况下有效:

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

让preview_width和preview_height成为相机预览的宽度和高度.这些是使用getBestPreviewSize()函数获得的,该函数循环支持的预览大小并选择较大的大小.我们假设他们是1280和720.

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

我们想要找到x_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但是,如从最终图片中裁剪的矩形区域所示,该数字实际上与预览区域中的矩形不对应.它离开了.我们的公式没有考虑屏幕尺寸,尽管通过修改它来考虑它们,但没有产生任何理想的结果.

我们怀疑预览大小和最终图片之间的映射在某种程度上考虑了屏幕尺寸,但还没有弄清楚究竟是多么准确,因为没有文档,在广泛搜索网络上的答案之后,没有任何相关内容出现.我们认为,在应用类比规则之前,我们需要考虑一定的比例因子和宽高比,以使公式正常工作.

你知道上面的正确公式吗?

got*_*o10 1

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

另请参阅: /sf/answers/1271154601/