Android GetSupportedPreviewSize返回反向宽度和高度

Android GetSupportedPreviewSize返回反向宽度和高度,android,android-camera,preview,Android,Android Camera,Preview,我正在使用DroidX开发一个使用相机预览图像的应用程序。我使用的代码在web上的许多地方都可以找到,但是我注意到常用的方法“getBestPreviewSize(width,height,camera.parameters)”返回的大小非常小,以至于标准的decodeYUV420SP方法失败,出现空指针异常 一些调试显示my DroidX支持的预览大小为: 144高x176宽 240高x 320瓦 288h x 352w 480h x 640w 480h x 720w 448h x 800w

我正在使用DroidX开发一个使用相机预览图像的应用程序。我使用的代码在web上的许多地方都可以找到,但是我注意到常用的方法“getBestPreviewSize(width,height,camera.parameters)”返回的大小非常小,以至于标准的decodeYUV420SP方法失败,出现空指针异常

一些调试显示my DroidX支持的预览大小为:

  • 144高x176宽
  • 240高x 320瓦
  • 288h x 352w
  • 480h x 640w
  • 480h x 720w
  • 448h x 800w
  • 720h x 1280w
请注意,高度和宽度的值提供了一个景观透视图。这不会随摄影机方向而改变。传递到
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;
        }
    }
pwidth
pheight
来自
surfaceChanged
回调的宽度和高度参数。 我试过照相机。设置显示方向(90);在onResume()中。我还将方向(“肖像”)放在清单中——这些尝试的4种组合似乎都没有改变这种行为

我的想法是简单地把它们颠倒过来,但在很多层面上都感觉不对。由于这段免费提供的代码似乎已经在许多其他示例中证明了自己,所以我显然是错误的。有人能对这种行为提供一些见解吗


提前感谢。

考虑相机的正确方式是在横向模式下,这意味着当您在纵向模式下考虑相机时,宽度和高度会感觉“翻转”


getBestPreviewSize(w,h,p)
函数只是
Camera.Parameters的
getSupportedPreviewSizes()
函数的包装,因此传入的宽度和高度不会改变bestPreviewSize函数的结果。

谢谢。不过我有点困惑。据我所知,我们将曲面大小传递给getBestPreviewSizes(),它返回设置previewsize的最佳宽度和高度。因此,如果宽度小于高度(如在纵向模式中),则返回的宽度将小于相机的高度,或者返回的高度将小于相机的宽度。所以我不明白它如何不影响getBestPreviewSize函数的结果。我的想法中缺少了什么?我在网上看到的大多数getBestPreviewSizes()FN都只使用宽度和高度来查找具有良好纵横比的预览大小。不管高度和宽度是否翻转,纵横比都是一样的。这回答了你的问题吗?是的,我同意丹尼尔,谢谢。我可以通过将宽度替换为高度来获得最佳预览大小,从而从getBestPreviewSize获得最大的预览大小。也许我没有解释清楚,但解决方案似乎是将w&h交换到getBestPreviewSIze,但似乎没有其他人有这个问题。我有这个问题。一年前,当我最后一次弄乱这段代码时,我没有过它。现在getSupportedPreviewSizes()返回面向横向的值对(宽度大于高度)。如果相机保持在纵向模式,如何从getSupportedPreviewSizes()返回纵向模式值?