【问题标题】:Custom camera Android preview picture is different from show picture自定义摄像头Android预览图片与显示图片不同
【发布时间】: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方法后显示的捕获图像未正确显示(图像纵横比不正确,图像似乎被压缩到视图中),即使我将图片保存到文件图像似乎没问题。

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

【问题讨论】:

    标签: android camera


    【解决方案1】:

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

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

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

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

    【讨论】:

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

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

    【讨论】:

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