Android相机支持的图片尺寸

时间:2011-11-03 10:53:04

标签: android android-camera

我正在尝试检索可用的相机图像尺寸,因此我可以将相机调整为我首选的图像分辨率。

要检索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); 
    }

4 个答案:

答案 0 :(得分:12)

getSupportedPictureSizes()会返回ListCamera.Size个对象。 Camera.Sizeheightwidth个数据成员,可以告诉您支持的图片大小的高度和宽度。

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对象具有widthheight属性。

以这种方式声明List可能比投射列表中的每个元素以在循环内键入Camera.Size更好。

在我的设备上,如果我查看sizes.get(0),它将具有最高分辨率,而sizes.get( sizes.size()-1 )具有最低分辨率。但是,我不确定这是否适用于所有设备。有人对此有所了解吗?