2014-12-04 98 views
2

我有一个SurfaceView可以在我的Android应用程序中显示实时相机预览图像。 SurfaceView覆盖了纵向画面的整个宽度和一部分屏幕高度。Nexus 7相机预览尺寸:不能改变长宽比

我试着设置各种预览尺寸,所以预览中有一个扭曲的长宽比,短而肥或高而瘦。

我打印的调试结果显示实际的预览显示尺寸和可用的预览相机尺寸,所以我可以计算出宽高比错误。

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

通常,我会选择宽高比最低的预览尺寸,但我正在试验。 screenshot of Photoshop measuring square

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

我通过在白色正方形指向照相机和使用Eclipse screenshotting它,然后测量在使用Photoshop的标尺工具的屏幕截图的白色正方形的图像测量的预览显示的纵横比误差。

予测得的正方形的xy尺寸在屏幕像素和计算1-(y/x),并且如在调试日志预测上述宽高比错误,应该是相同的。

我想这对

  • 阿尔卡特995,安卓4.0.4
  • 三星注2,是Android 4.4.2
  • 谷歌Nexus 7的Android 4.4.4
  • 谷歌Nexus 5, Android 5.0

具有各种长宽比,从正方形误差多达25%,并且在所有这些中,我在预览中测量了宽高比大约1%的预测。 (有错误,相机可能不直的,它可能是一个有点失焦...)

除谷歌Nexus 7

无论我怎样设置预览大小为Nexus 7,所测量的高宽比为约2%太高,这恰好是可用的最佳可能的宽高比:

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

就好像一些其他方案来与后固定最佳预览大小我设定了它。实际上,我在代码中等待了10秒钟,然后从相机读回预览尺寸,这是我设置的尺寸,但显示屏没有反映出这一点。无论我设置的预览尺寸如何,显示屏始终处于最佳状态。

在Nexus 7上预览尺寸有什么奇怪的地方吗?

我知道我的setPreviewSize东西,因为我可以预览设置为144 * 176px,然后我看到在显示奇数采样像素化文物。但它的纵横比还是有差不多的!

回答

0

我刚刚偶然发现了这个问题。据报道,这发生在一些设备上,当相机的图片尺寸和预览尺寸参数具有不同的纵横比时。就我而言,我的Nexus 7似乎总是使用4:3预览,无论我设置了什么。另外,getPreviewSize()报告我设定的大小,而不是真正使用的大小。

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

相关问题