0

我正在构建一个显示相机预览的 android 应用程序的一部分。我想为当前设备设置正确的(最佳)预览尺寸。

为此,我使用了以下代码:

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),在这台设备上两种方法的结果相同。但我想知道,你会建议哪种方法。

4

2 回答 2

3

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

于 2013-09-03T08:10:25.560 回答
0

从文档中getPreferredPreviewSizeForVideo()

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

因此,由于它基本上说预览不应大于首选大小,因此此方法返回可用的最大预览大小。

我还建议使用该方法,因为getSupportedPreviewSizes()不能保证返回的列表是有序的。我还没有看到出现故障,但这并不意味着每台设备都会兑现它。

于 2013-03-17T19:51:41.310 回答