GetSupportedPreviewSize返回的是宽度和高度颠倒的。

6
我正在使用DroidX开发一款应用程序,它使用相机预览图像。我在网上找到了很多代码,但我注意到常见的方法“getBestPreviewSize(width,height,camera.parameters)”返回的尺寸非常小,以至于标准的decodeYUV420SP方法会出现空指针异常。
一些调试显示,我的DroidX支持的预览大小为:
- 144h x 176w - 240h x 320w - 288h x 352w - 480h x 640w - 480h x 720w - 448h x 800w - 720h x 1280w
请注意,高度和宽度的值给出了横向透视图。这不随相机方向而变化。传递给getBestSupportedPreviewSizes的表面的宽度和高度为480w x 778h。
当我将相机参数传递给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 回调的宽度和高度参数中获取的。我已经尝试在 onResume() 中使用 camera.setDisplayOrientation(90);,还将 orientation("Portrait") 放入清单文件中 - 这4种尝试的组合似乎都没有改变这种行为。

我的想法是简单地反转它们,但在很多方面都感觉不对。由于这个免费可用的代码在许多其他示例中已经证明了自己,我显然是在错误的方法上接近它。有谁能解释一下这种行为吗?

提前感谢。

1个回答

4

正确的理解相机应该是以横向模式为准,这意味着当您以纵向模式思考时,宽度和高度会感觉“翻转”。

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


谢谢Daniel。不过我有点困惑。据我所知,我们将表面大小传递给getBestPreviewSizes(),它会返回最佳匹配的宽度和高度以设置预览大小。因此,如果宽度小于高度(如纵向模式),则返回的宽度将小于相机的高度或返回的高度将小于相机的宽度。因此,我不明白它如何不影响getBestPreviewSize函数的结果。我的思考中漏掉了什么? - bob
我在网上看到的大多数getBestPreviewSizes()函数只使用宽度和高度来查找良好纵横比的预览大小。无论高度和宽度是否翻转,纵横比都是相同的。 - Daniel Smith
1
是的,我同意Daniel的观点,谢谢。通过交换宽度和高度来获取getBestPreviewSize中最大的预览尺寸,我可以得到最佳的预览尺寸。也许我没有解释清楚,但解决方案似乎是在进入getBestPreviewSIze之前交换w和h,但似乎没有其他人遇到这个问题。 - bob
1
我有问题。我去年最后一次处理这个代码时并没有出现这个问题。现在,getSupportedPreviewSizes()返回横向取向的值对(宽大于高)。如果相机处于纵向模式下,我该怎么做才能从getSupportedPreviewSizes()获取纵向模式的值? - Alyoshak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接