如何在 android 中找到相机分辨率和纵横比

How to find Camera resolution and aspect ratio in android

我想在列表视图中获得支持的相机分辨率预览大小和纵横比,就像我在图片中显示的那样。目前我正在这样做,它只显示分辨率宽度和高度的列表,但我也想显示纵横比。

public void find_camera_resolution()
  {
    Camera mCamera = Camera.open();
    Camera.Parameters params = mCamera.getParameters();

    List<Camera.Size> sizes = params.getSupportedPreviewSizes();
    int widths[] = new int[params.getSupportedPreviewSizes().size()];
    int heights[] = new int[params.getSupportedPictureSizes().size()];

    Camera.Size mSize;
    for (Camera.Size size : sizes) {
        Toast.makeText(this,"Available resolution: "+widths.length+" "+size.height,Toast.LENGTH_LONG).show();
        mSize = size;
    }
}

但是我想在图片中这样显示

宽高比就是分辨率的比值。所以你(只)需要找到宽度和高度的 Greatest Common Divisor,将两个值除以除数,然后得到你的比率。

例如 1600x720 -> GCD: 80 -> 1600/80=20, 720/80=9 -> 宽高比:20:9

有很多现有的算法可以解决最大公约数问题,并且已经存在一些您可以使用的实现。

示例源代码在这里:

 int gcd=find_greatest_common_divisor_of_two_number(widths[i], heights[i]);
 String ratio =(widths[i]/gcd)+":"+(heights[i]/gcd);

 private static int find_greatest_common_divisor_of_two_number(int number1, int number2) {
    //base case
    if(number2 == 0){
        return number1;
    }
    return find_greatest_common_divisor_of_two_number(number2, number1%number2);
}