我不能再帮助自己了,我已经在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平板电脑。
答案 0 :(得分:0)
我终于找到了解决方案,这与硬件有关。某些设备存在错误:
解决方法:
这是一些已知的低级问题,有些设备;它们要求静态图片大小和预览大小具有匹配的宽高比,以避免拉伸伪影。
如果您的应用程序可以,请匹配setPreviewSize和setPictureSize的宽高比。
希望这对你有所帮助!