位图工厂返回空位图尽管大小限制

时间:2015-07-16 18:11:35

标签: android bitmap

我正在设置一个应用程序来拍照,保存它们的位置,并在gridview中显示它们。我有一个项目有一个相机图标,点击后将启动相机应用程序。

当我按照示例here时,我收到的错误是关于"未能提供结果信息"。所以我在这里搜索并按照this问题接受了答案。但是,接受的答案是在这里使用decodeFile()对活动结果不断返回null:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != Activity.RESULT_CANCELED) {
        if (requestCode == CAPTURE_IMAGE) {
            selectedImagePath = getImagePath();
            Bitmap newImage = decodeFile(selectedImagePath);
            ImageItem takenPhoto = new ImageItem(newImage,"Photo Taken");
            gridAdapter.add(takenPhoto);

        }

    }
}


public Bitmap decodeFile(String path) {
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, o);
        // The new size we want to scale to
        final int REQUIRED_SIZE = 70;

        // Find the correct scale value. It should be the power of 2.
        int scale = 1;
        while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
            scale *= 2;

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeFile(path, o2);
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return null;

}

我知道位图为空的原因是由于文件的大小,但我已将其最小化,正如答案所说。

为什么它仍然给我一个空响应?

编辑:

在得到别人的帮助后,我明白了。权限是在<申请>清单中的行,应该在它之前。

1 个答案:

答案 0 :(得分:1)

我没有测试它,但我认为错误是由于o.inJustDecodeBounds = true;为真,直到方法结束。在创建位图之前,您应该将其设置为false。