首页 > 代码库 > Bitmap createScaleBitmap()需要注意点

Bitmap createScaleBitmap()需要注意点

我们在创建Bitmap对象的时候,可能需要源于原来的Bitmap,然后做一些修改创建一个新的Bitmap,如以下方法:

public static Bitmap createBitmap(Bitmap src);

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height);

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height,
            Matrix m, boolean filter);

public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight,
            boolean filter);

注意API里的说明:     
     * Returns an immutable bitmap from the specified subset of the source
     * bitmap. The new bitmap may be the same object as source, or a copy may
     * have been made. It is initialized with the same density as the original
     * bitmap.


在创建Bitmap的时候,里面会有这么一个判断
    if (!source.isMutable() && x == 0 && y == 0 && width == source.getWidth() &&
            height == source.getHeight() && (m ==
 null || m.isIdentity())) 
            return source;
    }

在这里看出,如果原图是不可变的,新创建的图大小与原图一样,则直接返回原图。
如果代码里这样使用:
Bitmap newBmp = Bitmap.createBitmap(src, 0, 0, w, h);
src.recycle();
当 w == src.getWidth() && h == src.getHeight()时,可能newBmp直接返回的就是src这个对象,如果src被recycle()释放掉之后,再去使用newBmp,可能就会报异常

Bitmap createScaleBitmap()需要注意点