【问题标题】:setPreviewSize() bug in Android?Android 中的 setPreviewSize() 错误?
【发布时间】:2014-01-28 11:29:43
【问题描述】:

我的应用中有以下代码:

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 的我的 Galaxy S II 手机上,预览的宽度和高度,即 sz.width 和 sz.height 分别为 640 和 480!这是 4.1.2 中的错误,还是我的错误导致我在 3.1 中逃脱而在 4.1.2 中没有逃脱?

【问题讨论】:

    标签: android camera


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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 ....
          } 
      

      【讨论】:

      • 请注意,此算法不考虑表面的纵横比,因此预览图像可能会被拉伸或压扁。我在 CWAC-Camera 库中使用不同的算法作为我的默认算法,如stackoverflow.com/questions/21354313/… 中所述
      • 感谢更新亲爱的:)
      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 2023-04-01
      • 1970-01-01
      • 2015-12-08
      • 2017-12-16
      • 2013-09-14
      • 1970-01-01
      • 2016-03-03
      相关资源
      最近更新 更多