安卓摄像头预览尺寸问题

5
我的应用程序使用表面持有器打开相机。相机以默认预览尺寸打开。在某些设备上,预览尺寸捕获的图像比实际屏幕上可见的图像要多。为了避免这种情况,我开始自己设置预览尺寸。标准是从可用尺寸列表中选择与屏幕宽度最接近的预览尺寸。
大部分时间这样做效果很好。但是我经常遇到一些不喜欢我选择的预览尺寸的设备。
1)Nexus 4没有捕获我选择的某个预览尺寸的图像。 2)Samsung 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;
    }

任何关于这方面的指导都将非常有帮助。
谢谢!! Gagan
1个回答

10

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

传感器尺寸 相机具有由硬件确定的本机分辨率和宽高比。

图片尺寸 当您要求相机拍照时,它所生成的图像的大小。如果它与本机分辨率具有相同的宽高比,则将直接按比例缩放。如果宽高比不同,则会从原始大小裁剪。在我的经验中,getSupportedPictureSizes返回的最大尺寸是相机的本机分辨率。

预览尺寸 这是显示在屏幕上的图片预览的大小。它可能具有不同的宽高比,比本机大小或图片大小造成进一步的裁剪。

为了使屏幕上看到的和实际拍摄出来的图片最接近,请尝试选择一个预览大小,其宽高比尽可能接近您选择的图片大小的宽高比。我通常尽量使两者都与原生大小接近。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接