Android中的setPreviewSize()错误?

时间:2014-01-28 11:29:44

标签: android camera

我的应用中有以下代码:

camera = Camera.open(CameraInfo.CAMERA_FACING_FRONT);

Camera.Parameters setting_param = camera.getParameters();

setting_param.setPreviewSize(128,128);

camera.setParameters(setting_param);

Camera.Parameters read_param = camera.getParameters();

Camera.Size sz = read_param.getPreviewSize();

代码在运行Android 3.1的galaxy tab 10.1上完全按预期工作。但在运行4.1.2的My Galaxy S II手机上,预览的宽度和高度,即sz.width和sz.height分别为640和480!这是4.1.2中的错误,还是我的错误的结果,我在3.1中侥幸逃脱并且没有在4.1.2中逃脱?

2 个答案:

答案 0 :(得分:6)

在设置预览尺寸之前,您应该检查是否支持该预览尺寸。 您在Camera上有一个名为getSupportedPreviewSizes的方法,它会返回一个支持的预览大小列表。

答案 1 :(得分:4)

Mick,在设置之前,您应该检查相机是否支持预览尺寸。更改你的onSurfaceChanged方法,如下所示。

 public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {

   Camera.Parameters mParameters = mCamera.getParameters();
   Camera.Size bestSize = null;

   List<Camera.Size> sizeList = mCamera.getParameters().getSupportedPreviewSizes();
   bestSize = sizeList.get(0);

     for(int i = 1; i < sizeList.size(); i++){
      if((sizeList.get(i).width * sizeList.get(i).height) >
        (bestSize.width * bestSize.height)){
       bestSize = sizeList.get(i);
      }
     }

     mParameters.setPreviewSize(bestSize.width, bestSize.height);
     mCamera.setParameters(mParameters);
     mCamera.startPreview();

         //any other code ....
    }