关于Bitmap.createBitmap创建新的Bitmap,然后回收原Bitmap出现新的Bitmap也被回收的问题

出现问题的代码如下:

val bitmap = BitmapFactory.decodeByteArray(nv21, 0, nv21.size)

val matrix = Matrix()
matrix.postRotate(Config.ROTATE_ANGLE)

val tempBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, false)

bitmap.recycle()

把bitmap回收之后,发现tempBitmap也被回收了,经过判断bitmap==tempBitmap的结果是true,然后查看源码,发现这么一段代码:

// check if we can just return our argument unchanged
if (!source.isMutable() && x == 0 && y == 0 && width == source.getWidth() && height == source.getHeight() && (m == null || m.isIdentity())) {
    return source;
}

如果source也就是传进来的Bitmap是可变的,设置新Bitmap宽高指定位置和原来的一样,并且m也就是传进来的Matrix,判断isIdentity为true,那么就返回原Bitmap,所以问题就清楚了。

你可能感兴趣的:(关于Bitmap.createBitmap创建新的Bitmap,然后回收原Bitmap出现新的Bitmap也被回收的问题)