Android相机setPictureSize

时间:2014-05-21 06:31:20

标签: android android-camera resolution

我正在开发一个Android相机应用程序。我正在开发应用程序的设备具有以下支持的预览尺寸,按降序排列 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);
        }
    }

1 个答案:

答案 0 :(得分:3)

尝试以下代码,

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);

它将提供最大可用图片尺寸。