android - 如何协调相机预览尺寸和图片尺寸之间的纵横比差异

标签 android camera surfaceview

我有一个相机应用程序,它根据我的布局特征(主要是宽高比)选择预览尺寸,然后根据其他限制条件(最小尺寸)选择图片尺寸。这通常会导致图片的宽高比与预览不同。

这本身不是问题,但我需要将预览中的矩形映射到图片中的等效矩形,以便我可以提取最终照片中预览时可见的相同区域拍摄。

我知 Prop 有不同的纵横比意味着矩形的某些部分不会重叠,但我的工作距离边缘不够近,这应该是个问题。

如果无法直接知道预览和照片是如何映射的,是否有办法确定它们分别如何映射到 native 相机?如果我能以编程方式检测原生相机纵横比,我或许能够确定裁剪方案。

最佳答案

经过一些额外的试验和错误,我得出了以下初步结论:

  1. Camera.Parameters.getSupportedPictureSizes 提供的最大图像尺寸表示相机的原始分辨率。

  2. 其他图片尺寸的内容,以及 Camera.Parameters.getSupportedPreviewSizes 提供的预览尺寸,将在按 所述放大时与原生内容匹配矩阵.ScaleToFit.CENTER。 (基本上从中心开始缩放,直到顶部/底部或左/右达到原始分辨率的边界。如果宽高比不匹配,则裁剪发生在未达到原始分辨率边界的维度上

因此,鉴于此,我的解决方案是首先将预览选择矩形缩放到原生相机图片大小。然后,既然我知道原始分辨率的哪个区域包含我想要的内容,我可以执行类似的操作,然后将原始分辨率上的矩形缩放到根据 Camera.Parameters.setPictureSize 实际捕获的较小图片

关于android - 如何协调相机预览尺寸和图片尺寸之间的纵横比差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132281/

相关文章:

android - deleteDirectory : java. lang.NoSuchMethodError: 没有虚拟方法 toPath

javascript - 从html5拍照

android - 自定义相机的图像质量差

SurfaceView 中的 Android 相机预览

android - 使用 flutter 应用更改设备亮度

android - 检查访问 token 是否过期

android - 如何使用 SurfaceView android 处理来自相机的帧

Android:在surfaceview上实现admob

android - 在来电屏幕上弹出

java - 拍照并保存到 SD 而不会降低质量