【发布时间】:2013-03-12 22:47:42
【问题描述】:
我们一直在构建一个自定义的 Android 相机 Activity,其中一个矩形是 覆盖在相机预览内和拍摄照片时(在 按下按钮),我们要裁剪相应的矩形区域 的最终图像。问题是我们还没有弄清楚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 = 图片宽度 * x / 预览宽度; y_map = picture_height * y / preview_height;
但是,这似乎并不适用于所有情况。我们发现,当 手机的屏幕尺寸和预览尺寸差不多,那么这个 公式几乎可以工作(大约,有一个小错误)。
但是,对于索尼 XPERIA 手机等其他情况,屏幕尺寸为:宽度:480 和高度:854,公式失败。
例如,对于 x=50,则 x_map = 1632 * 50 / 1280 = 63.75 但是这个数字,如从最终裁剪的矩形区域所示 图片,与预览区域中的矩形并不真正对应。它 很遥远。我们的公式没有考虑屏幕尺寸, 尽管尝试修改它以考虑到它们,但并没有 产生了任何理想的结果。
我们怀疑预览尺寸和最终图片之间的映射不知何故 考虑到屏幕尺寸,但还没有弄清楚到底如何, 因为没有关于它的文档并且经过广泛搜索 网上没有相关的答案。我们相信有一个 我们需要考虑的某些比例因子和纵横比 在应用类比规则之前,公式可以正常工作。
你知道上面的正确公式吗?
【问题讨论】:
标签: android camera mapping image preview