gpt4 book ai didi

android - 在 Android 中正确的纵横比

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:36 38 4
gpt4 key购买 nike

我正在开发一个在 SurfaceView 上绘制相机的应用程序。一开始我发现观点有问题。它们没有正确显示。所以我用下面的方法来修正宽高比问题:

注意:此方法可在多个地方找到,作为校正 Android 相机纵横比的方法。

private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.1;
double targetRatio;

// Check wheter is portrait or landscape
if (orientation == 1)
targetRatio = (double) h / w;
else
targetRatio = (double) w / h;

if (sizes == null)
return null;

Size optimalSize = null;
double minDiff = Double.MAX_VALUE;

int targetHeight = h;

// Try to find an size match aspect ratio and size
for (Size size : sizes) {
double ratio = (double) size.width / size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}

// Cannot find the one match the aspect ratio, ignore the requirement
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}

这很完美,我的相机显示正确。但我发现较新的设备存在问题,例如 LG G3。它有一个该方法认为最合适的分辨率,但它在纵向模式下显示带有邮筒的图像,如下图所示:

enter image description here

为什么会这样?我该如何解决纵向模式下的这个邮筒?

最佳答案

除非该代码中存在错误,否则您将获得可能的“最佳”结果。

不能保证手机摄像头的纵横比与手机屏幕的纵横比相匹配。

这只是决定最佳结果的标准的问题。该代码是谷歌的建议,用于确定在手机屏幕上显示的最佳相机分辨率。

您可能不同意 Google。在这种情况下,您将需要编写自己的算法来确定最佳相机分辨率。您可以针对宽高比或沿宽度或高度的分辨率进行优化。您可以尝试适合屏幕,或者您可以裁剪图像的一些部分以填满整个屏幕。这取决于你。

注意:您发布的代码试图找到在屏幕宽高比的 10% 以内的相机分辨率并且具有与最接近的屏幕相匹配的高度。如果在屏幕宽高比的 10% 范围内没有摄像头分辨率,那么它会选择高度与屏幕最接近的摄像头分辨率。在这种情况下,您会在邮筒周围看到明显的黑条。

关于android - 在 Android 中正确的纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27057428/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com