我在我的应用程序中使用Camera.Parameters#setPictureSize()
来获取Camera#takePicture()
的更高分辨率图像。
我使用Camera.Parameters#getSupportedPictureSizes
来获得此尺寸。
这种方法很好,除了索尼Xperia S:在Logcat中,我在调用Camera#takePicture()
后得到的唯一一句话是:
Error -2147483648
我终于发现这款手机的最佳照片尺寸为4000x3000,这对我来说似乎太大了。 我尝试手动设置图片尺寸为1920x1080,然后拍摄图片,然后。
以下是获取最佳图片尺寸的代码:
private Camera.Size getBestPictureSize(int width, int height,
Camera.Parameters parameters) {
Camera.Size result = null;
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
Log.d(this.getClass().getName(), "getBestPictureSize() - s(n) = "
+ size.width + "x" + size.height);
if (result == null) {
result = size;
} else {
if (size.width > result.width) {
result = size;
}
}
}
return result;
}
那么,您是否知道如何获得设备的最佳图片尺寸,并确保takePicture能够按预期工作?
答案 0 :(得分:0)
也许不是最好的解决方案,但这是我在我正在研究的项目中使用的.-
private Size getPreferredPictureSize() {
Size res = null;
List<Size> sizes = camera.getParameters().getSupportedPictureSizes();
for (Size s : sizes) {
float ratio = (float) s.width / (float) s.height;
if (ratio == defaultCameraRatio && s.height <= PHOTO_HEIGHT_THRESHOLD) {
res = s;
break;
}
}
return res;
}
defaultCameraRatio
是默认摄像机分辨率的宽高比;你可以这样得到它.-
Camera.Parameters params = camera.getParameters();
defaultCameraRatio = (float) params.getPictureSize().width / (float) params.getPictureSize().height;
并且PHOTO_HEIGHT_THRESHOLD
是一个'合理的'最大高度,例如960.因此,总而言之,您将获得更小的分辨率,保持与默认宽高比相同的宽高比。