takePicture()失败,错误-2147483648

时间:2013-08-02 11:29:04

标签: android camera

我在我的应用程序中使用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能够按预期工作?

1 个答案:

答案 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.因此,总而言之,您将获得更小的分辨率,保持与默认宽高比相同的宽高比。