我们一直在构建一个自定义Android相机Activity,其中有一个矩形 覆盖在相机预览中以及拍摄照片时(在 按下按钮),我们想裁剪相应的矩形区域 最终的形象。问题是我们还没有弄清楚android是怎么回事 将预览屏幕映射到最终图像。
我们尝试了以下公式,但仅在某些情况下有效:
设x和y为矩形左上角的坐标 显示在相机预览中。
让preview_width和preview_height成为相机的宽度和高度 预习。这些是使用getBestPreviewSize()函数获取的,它循环 通过支持的预览尺寸并选择较大的尺寸。 我们假设他们是1280和720。
让picture_width和picture_height成为final的宽度和高度 相机支持的图片。为了我们的目的,假设这是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;
但是,这似乎并不适用于所有情况。我们发现当时 手机的屏幕尺寸类似于预览尺寸,那么这个 公式几乎可以工作(大约,有一个小错误)。
然而,对于像Sony XPERIA手机这样的其他情况,屏幕尺寸为:宽度:480 和高度:854,公式失败。
例如,对于x = 50,则x_map = 1632 * 50/1280 = 63.75 但是这个数字,如最终的矩形区域所示 图片,并不真正对应预览区域中的矩形。它 离开了。我们的公式没有考虑屏幕尺寸, 虽然试验修改它来解释它们,但却没有 产生了任何理想的结果。
我们怀疑预览尺寸与最终图片之间的映射不知何故 考虑到屏幕尺寸,但还没弄清楚究竟是怎样的, 因为没有关于它的文件和广泛搜索后 网上的答案没有任何相关性。我们相信有一个 我们需要考虑的某种比例因子和纵横比 在应用类比规则之前,公式才能正常工作。
你知道上面的正确公式吗?
答案 0 :(得分:1)
首先,获取Camera.getSupportedPictureSizes
返回的最大图片大小 - 这是您的相机的原始分辨率,您可以从中确定原始宽高比。将根据`Matrix.ScaleToFit.CENTER'裁剪具有不同宽高比的任何图片大小或预览大小。