如何在Android中获得支持的摄像头分辨率?

时间:2011-05-09 09:16:51

标签: java android camera

我正在编写一个应用程序,我允许用户使用手机摄像头捕获视频。我使用自己的代码来录制视频,而不是内置在相机应用程序中的Androids。

一切正常,但我需要能够访问支持的摄像头分辨率列表,以便我可以在运行时选择使用哪一个。我正在寻找像getSupportedPictureSizes()这样的东西,但是对于视频。 Android 3.0具有此功能,但我正在寻找2.2的东西。

截至目前我正在使用CamcorderProfile.QUALITY_HIGH / QUALITY_LOW,但这只给了我两个选项,在我测试的手机上,文件大小在每个极端。(QUALITY_LOW是216 kb / s和QUALITY_HIGH是> 3 MB / s)

任何帮助将不胜感激, 谢谢!

2 个答案:

答案 0 :(得分:9)

您是否尝试使用Camera.Parameters课程中的getSupportedVideoSizes() method

public List<Camera.Size> getSupportedVideoSizes()

此方法返回Size对象列表。如果相机没有单独的预览和视频输出,它将返回nullThe answer here表示当返回null时,您可以使用getSupportedPreviewSizes()列表。

答案 1 :(得分:5)

好的,我想我明白了。它似乎在我测试的手机上正常工作。

List<Size> tmpList = camera.getParameters().getSupportedPreviewSizes();

    final List<Size> sizeList = new Vector<Size>();

    //compair the apsect ratio of the candidate sizes against the real ratio
    Double aspectRatio = (Double.valueOf(getWindowManager().getDefaultDisplay().getHeight()) / getWindowManager().getDefaultDisplay().getWidth());
    for(int i=0; i<tmpList.size(); i++){
        Double tmpRatio = Double.valueOf(tmpList.get(i).height) / tmpList.get(i).width;
        if(Math.abs(aspectRatio - tmpRatio) < .15){
            sizeList.add(tmpList.get(i));
        }
    }