如何使用AndroidBitmapFactory.Options.inBitmap?

How to use Android BitmapFactory.Options.inBitmap?

此方法解码位图而不产生 OutOfMemory 异常:

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight)
{
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    options.inInputShareable = true;
    options.inPurgeable = true;

    BitmapFactory.decodeResource(res, resId, options);

    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

但字段 inInputShareableinPurgeable 在 sdk=21 中已弃用。

如何将上述方法更改为使用BitmapFactory.Options.inBitmap

它 运行 在 pre-21 设备上是否正确?

How do I change the above method to use BitmapFactory.Options.inBitmap?

options.inBitmap 设置为现有的 Bitmap 对象,您希望将其重新用作解码的目标。

Will it run correctly on pre-21 devices?

这将完全取决于您作为 Bitmap 提供的内容以及您如何定义 "correctly":

  • 在 API 级别 19+ 上,Bitmap 需要与您尝试解码的 Bitmap 大小相同或更大。否则,Bitmap 将被忽略,您将得到一个新的 Bitmap.

  • 在旧设备上,Bitmap 需要与您尝试解码的 Bitmap 大小(分辨率)相同。否则,Bitmap 将被忽略,您将得到一个新的 Bitmap.