2013-03-17 33 views
0

我正在构建一个显示相机预览的Android应用程序的一部分。我想为当前设备设置正确的(最佳)预览尺寸。getPreferredPreviewSizeForVideo()是获得正确预览大小的好方法吗?

要做到这一点,我用下面的代码:

public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int w, int h) { 
    Parameters parameters = camera.getParameters(); 
    List<Size> sizes = parameters.getSupportedPreviewSizes(); 

    // the list seems to be in that order, that the best quality is the first element 
    parameters.setPreviewSize(sizes.get(0).width, sizes.get(0).height); 

    camera.setParameters(parameters); 
    camera.startPreview(); 
} 

现在的问题是,如果下面的方法会更好地得到任何设备的最佳预览质量?

public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int w, int h) { 
    Parameters parameters = camera.getParameters(); 

    Size preferredSize = parameters.getPreferredPreviewSizeForVideo(); 
    parameters.setPreviewSize(preferredSize.width, preferredSize.height); 

    camera.setParameters(parameters); 
    camera.startPreview(); 
} 

目前我只有一个设备(Nexus 4),在这一个上,两种方法的结果都是一样的。但我想知道,你会建议哪种方法。

回答

0

从文档为getPreferredPreviewSizeForVideo()

摄像机应用程序应的预览大小设定为不小于优选的预览大小大的值。换句话说,预览尺寸的宽度和高度的乘积不应大于首选预览尺寸的乘积。

下去,因为它基本上是说预览不应超过首选大小大,这种方法应该返回最大预览大小可用。

我也推荐使用该方法,因为getSupportedPreviewSizes()返回的列表不是保证要按顺序排列。我还没有看到一个故障,但这并不意味着每个设备都会遵守它。

+0

在Galaxy Nexus(4.2.2)上,getSupportedPreviewSizes()方法返回null。所以我必须使用两种方法来设置最佳预览尺寸。你会同意吗? – 2013-03-18 09:28:09

+0

当然,如果一个给null,尝试另一个。虽然奇怪关于null。我的gNex没有这样做。使用getPreferredPreviewSizeForVideo()的htc one x上的 – Geobits 2013-03-18 14:40:40

+0

看起来不太好。我住的是什么相机startPreview设置自己。 – 2013-05-26 20:25:18

3

我不能真正推荐使用这种方法。在Galaxy S4上,此方法返回176x144的首选视频预览大小。似乎开发商意外地返回了最小尺寸而不是最大尺寸......如果您将其用作预览,它看起来很丑,甚至会破坏录制的视频。

+0

看看[我对这个问题的回答](http://stackoverflow.com/a/18154044/1977828),其中我展示了我最终使用的算法。 – 2013-09-04 18:54:06

+0

我们遇到了同样的问题,最后通过代码进行了手动选择。例如Xperia SP,Samsung SII,S3和Wildfire S有不同的排序标准 – 2014-01-24 08:53:59

+0

我还发现Galaxy S4 Mini(GT-I9195)上的首选视频预览尺寸为176x144, – 2014-07-09 13:40:36

相关问题