Android获取缩放图像文件长度

时间:2017-01-10 17:27:40

标签: android file bitmap out-of-memory scale


这是我的问题:
我要求我的用户在同一图像的不同尺寸之间进行选择以便上传它。
我的界面显示4个按钮,每个按钮提供有关宽度,图像高度和文件长度的信息。

我设法生成调用 Bitmap.createScaledBitmap 的四个版本的图像,然后再将这些位图压缩为文件。
我很清楚我需要回收位图并在完成后删除文件。

但是,在尝试计算大文件时,方法 createScaledBitmap 会引发内存不足异常。 我被告知使用 inJustDecodeBounds 选项来解码文件,但它会返回一个空位图。

有人知道如何解决这个问题吗?

以下是代码:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bmp = getScaledBitmap(BitmapFactory.decodeFile(uri, options), ratio);

private Bitmap getScaledBitmap(Bitmap bmp, float ratio) {
    int srcWidth = bmp.getWidth();
    int srcHeight = bmp.getHeight();
    int dstWidth = (int)(srcWidth * ratio);
    int dstHeight = (int)(srcHeight * ratio);
    Bitmap result = Bitmap.createScaledBitmap(bmp, dstWidth, dstHeight, true);
    bmp.recycle();
    return result;
}

1 个答案:

答案 0 :(得分:0)

要回答您的回复,我不认为它是重复的。我之前找到了你联系过的帖子,但它已经很老了,并没有解决我的问题。

无论如何,我解决了这个问题。

我首先尝试使用 Glide 库,这对于内存管理来说更好。虽然,有一个改进,但它并不完美,问题又出现了。

使用 android:largeHeap =“true”结束了我的噩梦。这必须在清单的应用程序字段中设置。

我希望这会帮助别人。