25

使用一些使用相机的 apk(例如,zxing、opencv)会发生这种情况。它在预览中显示有故障的图像,但它仍然是相机所见的功能,因此它似乎是编码不匹配。本机相机预览工作正常,因此内部应用程序不会出现此问题。

4

6 回答 6

32

现在,请尝试在您获取之后Camera但在设置和开始预览之前添加以下解决方法:

Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);

setPreviewFpsRange(或者,如果您还要设置其他参数,则只需将调用添加到现有参数。)

于 2013-10-08T19:54:53.160 回答
8

对于在 Glass 上使用 ZXing 的任何人,您都可以使用上述修复从源代码构建一个版本。

将以下方法添加到 CameraConfigurationManager.java

  public void googleGlassXE10WorkAround(Camera mCamera) {
        Camera.Parameters params = mCamera.getParameters();
        params.setPreviewFpsRange(30000, 30000);
        params.setPreviewSize(640,360);
        mCamera.setParameters(params);
  }

在 ZXing 代码中看到 Camera.setParameters() 后立即调用此方法。我只是把它放在 CameraConfigurationManager 的两个地方,它就起作用了。

我将预览尺寸设置为 640x360 以匹配 Glass 分辨率。

于 2013-10-17T18:29:28.327 回答
4

30 FPS 预览相当高。如果您想节省一些电池和 CPU,请考虑支持的最慢 FPS 就足够了:

List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
int[] minimumPreviewFpsRange = supportedPreviewFpsRanges.get(0);
parameters.setPreviewFpsRange(minimumPreviewFpsRange[0], minimumPreviewFpsRange[1]);
于 2014-01-27T15:33:41.840 回答
1

该错误在 XE16 和 XE16.11 中仍然存在,但此代码克服了故障并显示了正常的相机预览,请注意三个参数设置行及其值。我还在 5000 (5FPS) 下测试过它,它可以工作,在 60000 (60FPS) 下它不工作:

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mCamera == null) return;

        Camera.Parameters camParameters = mCamera.getParameters();
        camParameters.setPreviewFpsRange(30000, 30000);
        camParameters.setPreviewSize(1920, 1080);
        camParameters.setPictureSize(2592, 1944);
        mCamera.setParameters(camParameters);
        try {
            mCamera.startPreview();
        } catch (Exception e) {
            mCamera.release();
            mCamera = null;
        }
    }
于 2014-04-29T03:25:34.010 回答
0

从 XE22 开始,这仍然是一个问题(!)将每秒帧数降低到 30 或更低就可以了:

 parameters.setPreviewFpsRange(30000, 30000);

确实,不要忘记设置参数:

camera.setParameters(parameters);

我没有找到关于为什么这会导致问题的明确解释,因为 60 fps 包含在支持的 fps 范围内。该视频可以录制 720p,但我从未见过任何源将 fps 添加到此。

于 2015-04-08T16:18:10.893 回答
-2

您可以设置params.setPreviewSize(1200,800). 您可以在此范围内更改值,直到可以清除颜色噪点。

于 2013-10-10T02:37:03.103 回答