Как найти разрешение камеры и соотношение сторон в android - PullRequest
0 голосов
/ 29 марта 2020

Я хочу получить поддерживаемый размер предварительного просмотра разрешения камеры и соотношение сторон в виде списка, как я показал на фотографиях. В настоящее время я делаю это, чтобы показать список разрешений по ширине и высоте, но я также хочу показать соотношение сторон.

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;
    }
}

Но я хочу показать это на картинке enter image description here

1 Ответ

1 голос
/ 29 марта 2020

Соотношение сторон - это просто отношение разрешения. Таким образом, вам (просто) нужно найти Величайший общий делитель ширины и высоты, разделить оба значения на делитель, и тогда вы получите соотношение.

Например, 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);
}
...