React Native Android 获取设备的比率

React Native Android get device's ratio

我正在使用来自 expo 包的相机,但我遇到了相机视图失真的问题。我的 phone 有 2:1 比率,这是不标准的。

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

如何 select 适合设备自然分辨率的比例?有没有办法访问设备的首选比率?或者是否有任何破解,比如总是 selecting 16:9 并让相机组件添加黑边,实际设备的比例不符合 16:9?

编辑:

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

有没有什么办法可以推断出即使是这种愚蠢的分辨率也能达到最佳可能的比率?

在三星 S9 上,18.5:9 的屏幕纵横比非常接近 2:1。如果您不 hide the navigation bar,专门用于相机预览的区域可能更接近支持的 2:1

但是,如果您希望这适用于所有具有不同屏幕纵横比和不同支持的相机纵横比的设备,您必须将预览裁剪到 window,例如,参见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
})