我正在尝试检索可用的相机图像尺寸,因此我可以将相机调整为我首选的图像分辨率。
要检索Android相机尺寸,我使用了以下代码:
camera=Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
for (int i=0;i<sizes.size();i++){
Log.i("PictureSize", "Supported Size: " +sizes.get(i));
}
这给了我以下输出,我不知道如何翻译成大小。
"Supported size: android.hardware.Camera$Size@65d4c50"
"Supported size: android.hardware.Camera$Size@65d4a70"
"Supported size: android.hardware.Camera$Size@3fe4e00"
"Supported size: android.hardware.Camera$Size@3fe4cd0"
"Supported size: android.hardware.Camera$Size@18f5600"
"Supported size: android.hardware.Camera$Size@13f7860"
如果有人能帮我理解输出,那对我很有帮助,谢谢!
编辑:我最终通过执行以下操作解决了我的问题:
camera=Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
Camera.Size result = null;
for (int i=0;i<sizes.size();i++){
result = (Size) sizes.get(i);
Log.i("PictureSize", "Supported Size. Width: " + result.width + "height : " + result.height);
}
答案 0 :(得分:12)
getSupportedPictureSizes()
会返回List
个Camera.Size
个对象。 Camera.Size
有height
和width
个数据成员,可以告诉您支持的图片大小的高度和宽度。
Here is a sample project使用相关的getSupportedPreviewSizes()
查找预览尺寸,其中最大面积小于SurfaceView
的尺寸。
答案 1 :(得分:5)
Camera camera = Camera.open();
Parameters params = camera.getParameters();
List sizes = params.getSupportedPictureSizes();
for (int i=0;i<sizes.size();i++) {
Log.i("PictureSize", "Supported Size: " +sizes.get(i).width + "height : " + sizes.get(i).height);
}
您必须从一个尺寸的物体获取高度和宽度
答案 2 :(得分:2)
以下是一个如何搜索最大尺寸(1024 * 768)的尺寸的示例。
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
//searches for good picture quality
Camera.Size bestDimens = null;
for(Camera.Size dimens : sizes){
if(dimens.width <= 1024 && dimens.height <= 768){
if (bestDimens == null || (dimens.width > bestDimens.width && dimens.height > bestDimens.height)) {
bestDimens = dimens;
}
}
}
parameters.setPictureSize(bestDimens.width, bestDimens.height);
camera.setParameters(parameters);
答案 3 :(得分:0)
这就是我最终要做的事情。由于方法params.getSupportedPictureSizes()
返回类型为Camera.Size
的列表,因此很容易执行此操作:
List<Camera.Size> sizes = p.getSupportedPictureSizes();
//searches for good picture quality
for(Camera.Size dimens : sizes){
if(dimens.width <= 1024 && dimens.height <= 768){
Debug.WriteLine("Width: " + dimens.width + " Height: " + dimens.height);
return dimens;
}
}
Debug.WriteLine("Width: " + sizes.get(sizes.size()-1).width + " Height: " + sizes.get(sizes.size()-1).height);
//returns the smallest camera size if worst comes to worst
return p.getSupportedPictureSizes().get(sizes.size()-1);
您可以获得List<Camera.Size>
并像任何其他列表一样遍历它。 Camera.Size
对象具有width
和height
属性。
以这种方式声明List
可能比投射列表中的每个元素以在循环内键入Camera.Size
更好。
在我的设备上,如果我查看sizes.get(0)
,它将具有最高分辨率,而sizes.get( sizes.size()-1 )
具有最低分辨率。但是,我不确定这是否适用于所有设备。有人对此有所了解吗?