自定义摄像头Android预览图片与显示图片不同

Posted

技术标签:

【中文标题】自定义摄像头Android预览图片与显示图片不同【英文标题】:Custom camera Android preview picture is different from show picture 【发布时间】:2012-07-05 18:10:24 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

    根据widthheight 传入surfaceChanged(SurfaceHolder holder, int format, int width, int height) 的度量值计算最佳纵横比(宽度/高度)。

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

【讨论】:

看看打开的相机,纵横比的代码并不是最差的。但你可以把它清理一下【参考方案2】:

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

【讨论】:

就是你说的。但是我没有使用和ImageView,因为调用takePicture方法后图像会自动显示,所以我认为图像显示在表面上。我该如何控制? 您应该展示如何拍摄照片以及之后如何处理照片的代码,因为没有这些信息我无法帮助您 我正在使用 mCamera.takePicture(null, null, image); 从我的活动课程中拍摄照片其中“图像”是 PictureCallback。到那时,我并没有对这些照片做任何事。我在另一个类中实现了 SurfaceView,其中声明了方法 surfaceCreated 和 surfaceChanged(我在上面解释的最后一个)。 正如我所解释的,当调用 takePicture 方法时,图片(其纵横比不正确)会显示给用户几秒钟,然后再次显示(实时)预览。

以上是关于自定义摄像头Android预览图片与显示图片不同的主要内容,如果未能解决你的问题,请参考以下文章

Android相机旋转肖像模式图片

上传图片显示预览调用摄像头

自定义相机预览图片

图片预加载

android全屏预览照片第三方库使用

Android_5_学习《第一行代码》的使用摄像头和相册无法显示图片问题解决