【问题标题】:Android camera preview mapping to final pictureAndroid相机预览映射到最终图片
【发布时间】: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


    【解决方案1】:

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

    另请参阅: https://stackoverflow.com/a/18159351/994834

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多