1

Camera.Parameters#setPictureSize()在我的应用程序中使用以获得更高分辨率的图像Camera#takePicture()。我用Camera.Parameters#getSupportedPictureSizes得到这个尺寸。

这很好用,除了在 Sony Xperia S 上:在 Logcat 中,我打电话后唯一得到Camera#takePicture()的是一行字:

Error -2147483648

我终于发现这款手机的最佳图片尺寸是 4000x3000,这对我来说似乎太大了。我尝试通过手动将图片大小设置为 1920x1080,然后 takePicture 工作。

这是我获得最佳图片尺寸的代码:

    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 能够按预期工作的方法吗?

4

1 回答 1

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。因此,总而言之,您将获得一个较小的分辨率,并保持与默认分辨率相同的纵横比。

于 2013-08-02T11:38:21.727 回答