如何在 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);
}
我想在列表视图中获得支持的相机分辨率预览大小和纵横比,就像我在图片中显示的那样。目前我正在这样做,它只显示分辨率宽度和高度的列表,但我也想显示纵横比。
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);
}