Android相机getSupportedPreviewSizes()错误

时间:2014-08-09 18:00:35

标签: android camera screen-resolution

我在三星Galaxy Tab上测试我的Android应用程序。当我在平板电脑上打开相机应用程序时,我发现您可以为相机设置的可能分辨率为:

  • 2560 x 1920
  • 2560 x 1440
  • 2048 x 1536
  • 2048 x 1152
  • 1600 x 1200
  • 1536 x 864
  • 640 x 480

但是,当我在Android应用中打开相机实例并获取支持的预览尺寸时,我会得到以下分辨率:

  • 1024 x 768
  • 1280 x 720
  • 1024 x 576
  • 768 x 512
  • 640 480
  • 352 x 288
  • 320 x 240

为什么支持的决议存在这样的差异?我希望我的自定义相机活动能够使用全屏相机,我不能使用小于屏幕尺寸的分辨率(我的应用程序说的是800 x 1344)。

    // fetch screen size
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int width = metrics.widthPixels;
    int height = metrics.heightPixels+navBarHeight;
    Log.d(TAG, "screen width and height: " + width + " " + height);

    // get supported preview sizes
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    cameraCount = Camera.getNumberOfCameras();
    for(int camIdx = 0; camIdx < cameraCount; camIdx++){
        Camera.getCameraInfo( camIdx, cameraInfo );
        if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK){
            try {
                c = Camera.open(); // attempt to get a Camera instance
                for(int i =0; i< c.getParameters().getSupportedPreviewSizes().size(); i++){
                    Size size = c.getParameters().getSupportedPreviewSizes().get(i);
                    Log.d(TAG, "supported preview size: " + size.width + " " + size.height);
                }
            } catch (Exception e) {
                // Camera is not available (in use or does not exist)
                e.printStackTrace();
            }
        } else if(cameraCount == 1 && cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)          {
            // device only has a front facing camera
            try {
                c = Camera.open(camIdx); // attempt to get a Camera instance
            } catch (Exception e) {
                // Camera is not available (in use or does not exist)
                e.printStackTrace();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

  

为什么支持的决议存在这样的差异?

图片分辨率和预览分辨率不是一回事。前者用于拍照。后者用于预览框架。

  

我希望自定义相机活动能够使用全屏相机,而且我不能使用小于屏幕尺寸的分辨率(我的应用程序说的是800 x 1344)。

是的,你可以。 Android会很乐意拉伸或缩小预览框,以匹配您用于预览的TextureViewSurfaceView的尺寸。事实上,这种拉伸或缩小几乎是不可避免的,因为相机不太可能支持某种任意预览分辨率,恰好匹配您为预览View尺寸选择的任何内容。