Android 相机支持的图片尺寸

Posted

技术标签:

【中文标题】Android 相机支持的图片尺寸【英文标题】:Android camera supported picture sizes 【发布时间】:2011-12-21 01:47:13 【问题描述】:

我正在尝试检索可用的相机图像尺寸,以便将相机调整为我喜欢的图像分辨率。

为了检索 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); 
    

【问题讨论】:

【参考方案1】:

getSupportedPictureSizes() 返回 ListCamera.Size 对象。 Camera.Size 具有 heightwidth 数据成员,它们告诉您支持的图片大小的高度和宽度。

Here is a sample project 使用相关的getSupportedPreviewSizes() 查找最大区域小于SurfaceView 大小的预览大小。

【讨论】:

谢谢现在解决了我的问题。不知何故,我错过了通过调用 getSupportedPictureSizes() 来获取 Camera.Size 对象。示例项目很棒。 CommonsWare,在您的项目中,您没有设置图片大小 - 我想知道是否有必要设置图片大小?因为它给我带来了严重的麻烦,支持各种不同的设备并保持预览和图片大小同步,并且不让它们由于纵横比而变得太小。 @Zainodis:“在你的项目中,你没有设置图片大小”——那个特定的样本没有拍照。它只设置预览。 “有必要设置我想知道的图片大小吗?” -- 可能有默认值,但我总是设置一个。 “因为它给我带来了严重的麻烦,支持各种不同的设备并保持预览和图片大小同步,并且不让它们由于纵横比而变得太小”——当我处理其中一些时,我感到你的痛苦在我的 CWAC-Camera 辅助库中。 @CommonsWare 感谢您的回答:) 我担心不会有一个简单的解决方案。似乎相机处理是 Android xD 的圣杯之一。【参考方案2】:
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);     
   

您必须从一个尺寸的对象中获取高度和宽度

【讨论】:

我无法让它以这种方式工作。我最终改为执行以下操作:声明一个相机大小变量,然后用它来保存每个对象并从中获取宽度/高度。不太清楚为什么我不能像你建议的那样实现它。 @krishnabhadra 我想知道列表尺寸的第一个元素(sizes.get(0))是否是相机给出的最佳图片尺寸?或者只是一个随机的好图片大小的相机?【参考方案3】:

这是一个示例,说明如何搜索接近您的最大尺寸 (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);

【讨论】:

【参考方案4】:

这就是我最终要做的。由于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&lt;Camera.Size&gt; 并像任何其他列表一样遍历它。 Camera.Size 对象具有 widthheight 属性。

以这种方式声明您的 List 可能比将列表的每个元素强制转换为在循环内键入 Camera.Size 更好。

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

【讨论】:

在我的三星 Galaxy Note II 上,最小的尺寸是索引 0,向上。所以它在所有设备上并不相同。 是的,三星手机在相机方面很难使用。还有其他问题,例如图像被翻转(没有 exif 接口)。我见过人们试图检测设备是否是三星设备并基于它运行功能。多么痛苦,我说得对吗? 是的,这一切都非常可悲。尤其是编写驱动程序应该是操作系统的一部分。

以上是关于Android 相机支持的图片尺寸的主要内容,如果未能解决你的问题,请参考以下文章

常用支持的相机图片尺寸列表

Android 自定义相机 Camera 预览变形拉伸问题

从相机或画廊获取全尺寸图片

android 图片质量压缩和尺寸压缩有啥区别

新浪微博gif图片最大有效显示尺寸是多少

开源一个 Android 图片压缩框架