Android 获取缩放后的图像文件长度

Android Getting scaled image file length


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

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

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

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

代码如下:

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;
}

为了回答您的回复,我不认为它是重复的。我之前找到了您链接的线程,但是它很旧并且没有解决我的问题。

总之,我解决了问题。

我首先尝试使用 Glide 库,据说它更适合内存管理。虽然,有改进,但并不完美,问题又出现了。

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

我希望这对其他人有所帮助。