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

jln*_*46v 7 java camera android

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

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

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

非常感谢任何帮助,谢谢!

alx*_*cms 9

你尝试使用getSupportedVideoSizes()方法Camera.Parameters类?

public List<Camera.Size> getSupportedVideoSizes()
Run Code Online (Sandbox Code Playgroud)

此方法返回Size对象列表.null如果相机没有单独的预览和视频输出,它将返回.这里的答案表明,当它返回时,null您可以使用该getSupportedPreviewSizes()列表.

  • 因为:_Returns:如果摄像机具有单独的预览和视频输出,则为Size对象列表; 否则返回null._ (6认同)

jln*_*46v 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));
        }
    }
Run Code Online (Sandbox Code Playgroud)