【问题标题】:Android Camera setPictureSizeAndroid 相机设置图片大小
【发布时间】:2014-05-21 06:31:19
【问题描述】:

我正在开发一个安卓相机应用程序。我正在为其开发应用程序的设备具有以下受支持的预览尺寸(按降序排列)
1920 x 1080
1280 x 720
1088 x 1920
960 x 720
...
并且支持的图片尺寸是
2592 – 1944
2592 – 1728
2304 – 1296
...
等等。我应该从相机硬件中拍摄出最好的照片。我已将相机参数设置如下

 private void setCameraParams(Parameters params) {
        params.set("s3d-prv-frame-layout", "none");
        params.set("s3d-cap-frame-layout", "none");
        params.set("iso", "auto");
        params.set("contrast", 100);
        params.set("brightness", 50);
        params.set("saturation", 100);
        params.set("sharpness", 100);
        params.setAntibanding("auto");
        params.setPictureFormat(ImageFormat.JPEG);
        params.set("jpeg-quality", 100);
//        params.setJpegQuality(CameraProfile.getJpegEncodingQualityParameter(0, CameraProfile.QUALITY_HIGH));
        if (params.isZoomSupported())
            params.setZoom(0);
        setPreviewSize(params);
        setPictureSize(params);
        camera.setParameters(params);
    }

方法setPreviewSize()setPictureSize() 按降序对支持的尺寸进行排序,然后选择最靠前的尺寸(最大、最佳)。仍然当我拍照并将该文件拉到我的系统上时,我看到的尺寸是1920 x 1080,这与我设置的previewSize 相同。问题是当我从默认相机拍摄照片并将文件拉到我的系统上时,大小为2592 x 1944,这是最大图片大小。我怎样才能从我的相机中以这种尺寸的图像拍摄照片?任何需要添加的参数,我都尝试了各种参数的排列和组合,但徒劳无功。任何帮助将不胜感激。

更新:为setPictureSize() method 添加代码

private void setPictureSize(Camera.Parameters params) {
        if (sizes == null || resStrings == null) {
            sizes = params.getSupportedPictureSizes();
            if (sizes != null && !sizes.isEmpty()) {
                Collections.sort(sizes, new Comparator<Camera.Size>() {
                    @Override
                    public int compare(Camera.Size lhs, Camera.Size rhs) {
                        if ((lhs.width > rhs.width) && (lhs.height >= rhs.height))
                            return -1;
                        else if ((rhs.width > lhs.width) && (rhs.height >= lhs.height))
                            return 1;
                        else if ((lhs.width == rhs.width)) {
                            if (lhs.height > rhs.height)
                                return -1;
                            else if (rhs.height > lhs.height)
                                return 1;
                            else
                                return 0;
                        } else
                            return 0;
                    }
                });

                int i = 0;
                resStrings = new String[sizes.size()];
                for (Camera.Size temp : sizes) {
                    resStrings[i] = temp.width + " x " + temp.height;
                    i++;
                    Log.d("PICRES", temp.width + " x " + temp.height);
                }

                params.setPictureSize(sizes.get(getCameraResAtPosition(cameraResSelected)).width,
                        sizes.get(getCameraResAtPosition(cameraResSelected)).height);
            }
        } else {
            params.setPictureSize(sizes.get(getCameraResAtPosition(cameraResSelected)).width,
                    sizes.get(getCameraResAtPosition(cameraResSelected)).height);
        }
    }

【问题讨论】:

    标签: android android-camera resolution


    【解决方案1】:

    试试下面的代码,

    List<Size> sizes = param.getSupportedPictureSizes();
        Camera.Size size = sizes.get(0);
        for (int i = 0; i < sizes.size(); i++) {
            if (sizes.get(i).width > size.width)
                size = sizes.get(i);
        }
    
        param.setPictureSize(size.width, size.height);
    

    它将给出可用的最大图片尺寸。

    【讨论】:

    • 我已经按照上述方法完成了“setPreviewSize() 和 setPictureSize() 方法按降序对支持的尺寸进行排序,并选择顶部的尺寸(最大、最佳)”
    • 嗯,我正在使用这段代码获得最大尺寸。尝试给出一些静态宽度和高度,看看它是否生成相同的尺寸。
    • 我们不能给出任何静态值,我们必须从支持的尺寸列表中进行选择。无论我为预览尺寸提供什么尺寸,图像都会采用该尺寸,而不是图片尺寸!
    • 这是一个老问题。但是对于未来的读者来说,上面的代码肯定是有效的。由于参数设置不正确,我们遇到了一些硬件固件问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2012-06-14
    • 2019-01-13
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多