我正在开发一款使用手机相机的Android应用,我正在使用自定义代码。
问题是预览中显示的图像不正确(图像宽高比不正常)。
如果我使用以下代码:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
Camera.Size selected = sizes.get(0);
params.setPreviewSize(selected.width,selected.height);
mCamera.setParameters(params);
mCamera.startPreview();
预览图像正常(我认为图像顶部和底部的一小部分未显示)。
问题在于调用takePicture方法后显示的捕获图像显示不正确(图像宽高比不正常,图像看起来被压缩到视图中),即使如此我将图片保存到文件图像似乎没问题。
我想知道是否可以在两种情况下正确显示图像。建议?
答案 0 :(得分:3)
解决方案很简单,但我不知道我必须手动设置正确的宽高比(这不是一个自动过程,我认为它是这个步骤并没有在大多数情况下解释到的)。最后,我这样解决了:
使用params.getSupportedPreviewSizes()
和params.getSuppertedPictureSize()
获取支持的尺寸。
根据width
中传递的度量height
和surfaceChanged(SurfaceHolder holder, int format, int width, int height)
计算最佳宽高比(宽度/高度)。
在调用setPreviewSize
方法之前,分别使用setPictureSize
和startPreview()
设置最佳预览尺寸和图片尺寸。
答案 1 :(得分:0)
如果您保存了图像并且显示正确,则问题不在于拍摄的图像,而是您将图像显示回用户的方式。如果您正在使用ImageView,请确保您使用的是src(不是背景),因为src将保持纵横比,但背景会拉伸并扭曲图像以填充背景。同样,您可以设置android:adjustViewBounds =“true”让ImageView调整其边界以保持纵横比。