我正在开发一个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);
}
}
答案 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);
它将提供最大可用图片尺寸。