首页 文章

Nexus 7相机预览尺寸:无法改变宽高比

提问于
浏览
2

我有一个SurfaceView在我的Android应用程序中显示实时相机预览图像 . SurfaceView覆盖纵向屏幕的整个宽度,以及屏幕高度的一部分 .

我尝试设置各种预览尺寸,因此预览有一个扭曲的宽高比,短,胖或高和瘦 .

我打印的调试显示了实际的预览显示尺寸和可用的预览相机尺寸,因此我可以计算出宽高比错误 .

Screen size available for preview: w*h:1200*1646; Aspect ratio: 0.73
Rotation: 0; finalCameraRotation: 90; sideways: true
Supported Preview size: w*h:1080*1920: AspectRatio: 0.56: Error: -22.84%
Supported Preview size: w*h:768*1280: AspectRatio: 0.60: Error: -17.70%
...

通常,我会选择具有最低纵横比误差的预览尺寸,但我正在尝试 .

List<Camera.Size> ss = parameters.getSupportedPreviewSizes();
...
Camera.Size s = ss.get(pickOne);
parameters.setPreviewSize(s.width, s.height);
...
camera.setParameters(parameters);
...
camera.startPreview();

我通过将相机指向白色方块并使用Eclipse截屏它来测量预览显示的宽高比误差,然后使用photoshop标尺工具测量屏幕截图中白色方块的图像:
screenshot of Photoshop measuring square
.

我以屏幕像素测量了平方的 xy 大小并计算了 1-(y/x) ,这应该与上面调试日志中预测的宽高比误差相同 .

我试过这个

  • 阿尔卡特995,Android 4.0.4

  • Samsung Note 2,Android 4.4.2

  • Google Nexus 7,Android 4.4.4

  • Google Nexus 5,Android 5.0

具有各种宽高比,从平方误差多达25%,并且在所有这些中,我在预览中测量的宽高比在预测的约1%内 . (有错误,相机可能不是直接的,可能有点失焦......)

Except for the Google Nexus 7.

无论我为Nexus 7设置了什么样的预览尺寸,测量的宽高比都高约2%,这恰好是可用的最佳宽高比:

Supported Preview size: w*h:768*1024: AspectRatio: 0.75: Error: 2.87%

这就好像其他程序即将到来并在我设置之后修复最佳预览大小 . 我实际上放入代码等待10秒并从相机读回预览大小,这是我设置的,但显示没有反映出来 . 无论我设置的预览尺寸如何,显示始终是最佳的 .

Is there something weird about preview sizes on Nexus 7?

我知道我的 setPreviewSize 正在做一些事情,因为我可以将预览设置为144 * 176px,然后我在显示器中看到奇数上采样像素化伪像 . 但它仍然具有几乎正确的宽高比!

1 回答

  • 0

    我've just stumbled upon this problem myself. Reportedly, this happens to some devices, when camera'的图片大小和预览大小参数具有不同的宽高比 . 在我的情况下,无论我设置什么,我的Nexus 7似乎总是使用4:3预览 . 另外, getPreviewSize() 报告了我设定的尺寸,而不是实际使用的尺寸 .

    解决方案是找到具有与预览宽高比匹配的宽高比的图片尺寸 . 因此,使用 getSupportedPictureSizes() 获取支持的图片大小列表,选择一个具有适当宽度/高度比的图片,然后选择 setPictureSize(int width, int height) . 它对我有用,就像一个魅力:)

相关问题