android - React Native Android 获取设备的比率

标签 android android-camera react-native expo

我正在使用来自 expo 包的相机,但我遇到了相机 View 失真的问题。我的手机有 2:1 比例,这是非标准比例。

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

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

编辑:

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

有什么方法可以推断出即使是这样愚蠢的分辨率的最佳可能比率?

最佳答案

在三星 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
})

关于android - React Native Android 获取设备的比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467776/

相关文章:

android - 如何在单击按钮时从后置摄像头切换到前置摄像头?

react-native - 无法在 react 原生视频中暂停

android - JavaCV 录像机方向在纵向模式下不正确

android - 以编程方式读取位于 android/app/sample.properties 文件的文件

java - 同一布局中的多个RecyclerView : Click listener for one gets triggered for all recyclerViews

android - 横向模式下的间距问题

android - Android Camera Client 的优先级是如何设置的?

javascript - React Native 使用 NavigationEvents 将数据传递到另一个屏幕

javascript - 从 Cheerio 抓取 Youtube 数据

Android Studio NDK : Compile with ndk-build and get native support with Gradle Experimental