我正在使用DroidX开发使用相机预览图像的应用程序。我正在使用的代码在Web上的很多地方都可以找到,但是我注意到常见的方法“getBestPreviewSize(width,height,camera.parameters)”返回的尺寸很小,以至标准的debugYUV420SP方法由于空指针异常而失败。

通过一些调试,发现我的DroidX的supportPreviewSizes为:

  • 144h x 176w
  • 240h x 320w
  • 288h x 352w
  • 480h x 640w
  • 480h x 720w
  • 448h x 800w
  • 720h x 1280w

  • 请注意,height和width的值提供了景观角度。这不会随相机方向改变。传递给getBestSupportedPreviewSizes的表面的宽度和高度为480w x 778h。

    当我将camera.parameters传递给getBestSupportedPreviewSizes()时,它将返回288 x 352的尺寸。这是调用代码-如果格式不正确,我很抱歉,但是这是可行的:
          if (!cameraConfigured) {
            Camera.Parameters parameters=camera.getParameters();
            Camera.Size size=getBestPreviewSize(pwidth, pheight, parameters);
            if (size!=null) {
              parameters.setPreviewSize(size.width, size.height);
              camera.setParameters(parameters);
              cameraConfigured=true;
            }
        }
    
    pwidthpheight来自surfaceChanged回调的width和height参数。
    我已经尝试过camera.setDisplayOrientation(90);在onResume()中。我还在 list 中放置了direction(“Portrait”)-这些尝试的4种组合似乎都没有改变这种行为。

    我的想法是简单地扭转它们,但是在很多层面上感觉都是错误的。由于这个免费的代码似乎已经在许多其他示例中得到了证明,因此我显然将其弄错了。任何人都可以对此行为提供一些见识吗?

    提前致谢。

    最佳答案

    考虑相机的正确方法是在横向模式下,这意味着当您在纵向模式下考虑相机时,其宽度和高度会“翻转”。
    getBestPreviewSize( w, h, p )函数只是getSupportedPreviewSizes()Camera.Parameters函数的包装,因此传入的宽度和高度不会更改bestPreviewSize函数的结果。

    关于android - GetSupportedPreviewSize返回反向宽度和高度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11276924/

    10-10 02:23