1

我正在开发一个使用手机摄像头的 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方法后显示的捕获图像未正确显示(图像纵横比不正确,图像似乎被压缩到视图中),即使我将图片保存到文件也会出现图像没问题。

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

4

2 回答 2

3

解决方案很简单,但我不知道我必须手动设置正确的纵横比(这不是一个自动过程,我认为它是,而且这一步在大多数操作方法中都没有解释)。最后,我以这种方式解决了它:

  1. params.getSupportedPreviewSizes()使用和获取支持的大小params.getSuppertedPictureSize()

  2. 根据度量计算最佳纵横比width(宽度/高度)并height传入surfaceChanged(SurfaceHolder holder, int format, int width, int height).

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

于 2012-07-08T15:46:59.477 回答
0

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

于 2012-07-05T18:29:30.207 回答