React Native Android 获取设备的比例

Alb*_*mec 4 android android-camera react-native react-native-android expo

我正在使用来自expo包装的相机,但在相机视图失真方面遇到了麻烦。我的手机有2:1比率,这是非标准的。

当我使用getSupportedRatiosAsync相机的方法时,我得到了各种比例,如1:1, 2:1, 4:3, 16:9,但只是2:1看起来不错。

如何选择适合设备自然分辨率的比率?有没有办法访问设备的首选比率?或者它周围有什么技巧,比如总是选择16:9并让相机组件添加黑色边距,而实际设备的比例不适合16:9?

编辑:

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

即使对于如此愚蠢的分辨率,有什么方法可以推断出最佳比率?

Ale*_*ohn 6

在三星S9上,屏幕纵横比18.5:9非常接近2:1。如果您不隐藏导航栏,则专门用于相机预览的区域可能更接近支持的2:1.

但是,如果您希望它适用于具有不同屏幕纵横比和不同支持的相机纵横比的所有设备,则必须将预览裁剪到您的窗口,例如https://github.com/waitopiggu/rn-camera-android-裁剪测试。

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

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
})
Run Code Online (Sandbox Code Playgroud)