相机预览失真

时间:2015-12-11 15:39:07

标签: android camera

我不能再帮助自己了,我已经在stackoverflow上阅读了关于这个问题的所有帖子,但没有什么能解决我的问题。

我尝试在FrameLayout中设置我的相机预览,一切正常。我使用以下代码确定预览的正确大小:

private Camera.Size getBestPreviewSize(int width, int height,
                                           Camera.Parameters parameters) {
    Camera.Size result = null;
    for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
        if (size.width <= width && size.height <= height) {
            if (result == null) {
                result = size;
            } else {
                int resultArea = result.width * result.height;
                int newArea = size.width * size.height;
                if (newArea > resultArea) {
                    result = size;
                }
            }
        }
    }
    return (result);
}

然后我将它应用到我的相机:

Camera.Parameters params = mCamera.getParameters();
Camera.Size size = getBestPreviewSize(width, height, params);
params.setPreviewSize(size.width, size.height);
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(params);

之后预览仍然失真,我的FrameLayout(我希望它的大小与我计算的预览尺寸相同)仍为全屏。

全屏表示1920x1200 预览大小表示1920x1080

所以我做的是手动将FrameLayout的大小设置为计算出的预览大小。然而,然而,我的预览看起来更加偏斜。

我不知道我做错了什么。我想当我使用支持的预览尺寸时,这不应该发生。

更新

我在另一台设备上运行我的应用程序,一切正常。这可能是硬件错误吗?不适合我的设备是Nexus 7平板电脑。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案,这与硬件有关。某些设备存在错误:

Bug-Report

解决方法:

  

这是一些已知的低级问题,有些设备;它们要求静态图片大小和预览大小具有匹配的宽高比,以避免拉伸伪影。

     

如果您的应用程序可以,请匹配setPreviewSize和setPictureSize的宽高比。

希望这对你有所帮助!