我正在使用来自expo软件包的Camera,但遇到相机视图失真的问题。我的手机的2:1比率是非标准比率。

当我使用相机的getSupportedRatiosAsync方法时,会得到各种比率,例如1:12:14:316:9,但是只有2:1看起来不错。

如何选择适合设备自然分辨率的比例?有没有办法访问设备的首选比率?还是周围有什么漏洞,例如总是选择16:9并让摄像头组件增加黑边,而实际设备的比例却不符合16:9

编辑:

我的手机分辨率为2196x1080,因此正确的比率应为2:1。但是我无法提出一个可以计算2196x1080 => 2:1的函数,因为(2 * 1080) !== 2196

即使有这种愚蠢的分辨率,有什么方法可以推断出最佳的比率吗?

最佳答案

在Samsung S9上,18.5:9的屏幕纵横比非常接近2:1。如果您不选择hide the navigation bar,则专门用于相机预览的区域可能甚至更靠近被推荐的2:1

但是,如果您要在所有设备上使用不同的屏幕长宽比和支持的相机长宽比,则必须将预览裁剪到窗口中,例如, https://github.com/waitopiggu/rn-camera-android-cropping-test

至于选择最佳的相机纵横比,您可能无法完全匹配;让我们找到最接近我们想要的一个:

const wantedRatio = height/width
var bestRatio = 0;
var bestRatioError = 100000;
for (i in ratios) {
    const r = ratios[i].split(":")
    if (abs(wantedRatio - r[0]/r[1]) < bestRatioError) {
        bestRatioError = abs(wantedRatio - r[0]/r[1])
        bestRatio = ratios[i]
    }
}

this.setState({
    bestRatio
})

10-04 11:22