React Native Android 获取设备比例

4
我正在使用来自expo包的相机,但是我在相机视图失真方面遇到了问题。我的手机显示比例为2:1,这是非标准的。
当我使用相机的getSupportedRatiosAsync方法时,我会得到各种比例,如1:12:14:316:9,但只有2:1看起来不错。
如何选择适合设备自然分辨率的比例?是否有一种方法可以访问设备的首选比例?或者是否有任何解决方法,例如始终选择16:9并让相机组件添加黑色边距,以使实际设备的比例不适合16:9
编辑:
我的手机分辨率为2196x1080,因此正确的比例应该是2:1。但我无法想出一个函数来计算2196x1080=>2:1,因为(2 * 1080) !== 2196
即使对于这样愚蠢的分辨率,是否有任何方法可以推断出最佳比例?

1
我的手机分辨率是2196x1080,因此正确的比例应该是2:1。相机比例不一定与设备屏幕比例相同。看看你的原生相机应用程序——它有状态栏吗?它是否有用于拍照的按钮空间?如果这些条件中的任何一个成立,那么就可以解释你的手机显示分辨率和相机分辨率之间的差异了。 - markmoxx
1个回答

6
在三星S9上,18.5:9的屏幕比例非常接近于2:1。如果您不隐藏导航栏,相机预览所用区域可能甚至更接近支持的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
})

我相信这个想法很好,但是代码无法工作。例如,r是一个数组,而你试图从一个数字wantedRatio中减去它。你能修复一下吗? - Albert Nemec
抱歉,这就是在尝试同时复制/粘贴和清理时发生的事情 ;) - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接