这是我的问题:
我要求我的用户在同一图像的不同尺寸之间进行选择以便上传它。
我的界面显示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;
}
答案 0 :(得分:0)
要回答您的回复,我不认为它是重复的。我之前找到了你联系过的帖子,但它已经很老了,并没有解决我的问题。
无论如何,我解决了这个问题。
我首先尝试使用 Glide 库,这对于内存管理来说更好。虽然,有一个改进,但它并不完美,问题又出现了。
使用 android:largeHeap =“true”结束了我的噩梦。这必须在清单的应用程序字段中设置。
我希望这会帮助别人。