我正在使用来自expo
软件包的Camera,但遇到相机视图失真的问题。我的手机的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
即使有这种愚蠢的分辨率,有什么方法可以推断出最佳的比率吗?
最佳答案
在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
})