【问题标题】:Android Camera Preview Size issueAndroid相机预览大小问题
【发布时间】:2013-10-08 22:10:04
【问题描述】:

我的应用使用表面支架打开相机。相机以默认预览大小打开。在某些设备上,默认预览大小捕获的图像多于屏幕上实际可见的图像。为了避免这种情况,我开始自己设置预览大小。标准是从可用尺寸列表中选择最接近屏幕宽度的预览尺寸。

这在大多数情况下都很好用。但我经常偶然发现一些不喜欢我选择的预览尺寸的设备。

1) Nexus 4 没有为我选择的其中一种预览尺寸捕获图像。 2) 三星 S 4 沿捕获的图像显示线条(噪点)。

所以我想了解我是否在做任何违反标准的事情。这是我的问题:-

1) 我正在使用表面支架打开相机。有没有其他方法可以在我的应用程序中使用相机硬件。

2) 我正在从可用尺寸列表中选择预览尺寸。在选择任何尺寸之前我应该​​寻找任何具体的东西吗?选择大小的逻辑如下:-

private Camera.Size getBestPreviewSize(int width, int height)
    {
        List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
        if (sizes == null) return null;

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = height;
        int targetWidth = width;

        int minWidthDiff = 0;
        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.width - targetWidth) < minDiff) {
                    if(size.width > width) {
                        if (minWidthDiff == 0) {
                            minWidthDiff = size.width - width;
                            optimalSize = size;
                        }
                        else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
                            minWidthDiff = size.width - width;
                            optimalSize = size;

                        }   
                        minDiff = Math.abs(size.width - targetWidth);
                     }
                }
            }
        }

        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.height - targetHeight) < minDiff) {
                    optimalSize = size;
                    minDiff = Math.abs(size.height - targetHeight);
                }
            }
        }
        return optimalSize;
    }

这方面的任何指示都会有帮助。

谢谢!! 加根

【问题讨论】:

    标签: android camera size preview


    【解决方案1】:

    使用相机时,您需要考虑几种不同的尺寸:

    传感器尺寸 相机具有由硬件决定的原始分辨率和纵横比。

    图片尺寸 这是当您告诉相机拍照时产生的图像的大小。如果它与原始分辨率具有相同的纵横比,那么它将直接从该分辨率缩放。如果纵横比不同,则将从原始尺寸裁剪。根据我的经验,getSupportedPictureSizes 返回的最大尺寸是相机的原始分辨率。

    预览尺寸 这是屏幕上显示的图像预览的大小。它可能与原始大小或图片大小的纵横比不同,从而导致进一步裁剪。

    要使您在屏幕上看到的内容与拍摄照片时生成的图像最接近,请尝试选择纵横比尽可能接近您的图片大小纵横比的预览尺寸已选择。我通常会尽量让两者都接近原生尺寸。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多