自定义相机Android预览图片与显示图片不同

时间:2012-07-05 18:10:24

标签: android camera

我正在开发一款使用手机相机的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方法后显示的捕获图像显示不正确(图像宽高比不正常,图像看起来被压缩到视图中),即使如此我将图片保存到文件图像似乎没问题。

我想知道是否可以在两种情况下正确显示图像。建议?

2 个答案:

答案 0 :(得分:3)

解决方案很简单,但我不知道我必须手动设置正确的宽高比(这不是一个自动过程,我认为它是这个步骤并没有在大多数情况下解释到的)。最后,我这样解决了:

  1. 使用params.getSupportedPreviewSizes()params.getSuppertedPictureSize()获取支持的尺寸。

  2. 根据width中传递的度量heightsurfaceChanged(SurfaceHolder holder, int format, int width, int height)计算最佳宽高比(宽度/高度)。

  3. 在调用setPreviewSize方法之前,分别使用setPictureSizestartPreview()设置最佳预览尺寸和图片尺寸。

答案 1 :(得分:0)

如果您保存了图像并且显示正确,则问题不在于拍摄的图像,而是您将图像显示回用户的方式。如果您正在使用ImageView,请确保您使用的是src(不是背景),因为src将保持纵横比,但背景会拉伸并扭曲图像以填充背景。同样,您可以设置android:adjustViewBounds =“true”让ImageView调整其边界以保持纵横比。