Android中的setPreviewSize()错误?

Android中的setPreviewSize()错误?,android,camera,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.getPar

我的应用程序中有以下代码:

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();

在运行安卓3.1的galaxy tab 10.1上,代码的工作原理与预期完全一致。但在运行4.1.2的Galaxy S II手机上,预览的宽度和高度,即sz.width和sz.height分别为640和480!这是4.1.2中的一个错误,还是我在3.1中犯了一个错误而在4.1.2中却没有犯的错误的结果?

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

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 ....
    } 
public void surfaceChanged(SurfaceHolder holder,int格式,int宽度,
整数高度){
Camera.Parameters mParameters=mCamera.getParameters();
Camera.Size bestSize=null;
List sizeList=mCamera.getParameters().getSupportedPreviewSizes();
bestSize=sizeList.get(0);
对于(int i=1;i
(最佳尺寸.宽度*最佳尺寸.高度){
最佳尺寸=尺寸列表。获取(i);
}
}
mParameters.setPreviewSize(bestSize.width、bestSize.height);
mCamera.setParameters(mParameters);
mCamera.startPreview();
//任何其他代码。。。。
} 

请注意,此算法没有考虑曲面的纵横比,因此预览图像可能会被拉伸或挤压。我在CWAC相机库中使用不同的算法作为默认算法,如感谢更新亲爱的:)