Bitmap.createScaledBitmap的陷阱

来源:互联网 发布:sql server回滚事务 编辑:程序博客网 时间:2024/05/05 08:22

今天遇到一个奇怪的事情, 在显示图片时其他图片都没问题, 但一些特定图片的显示就crash。

代码如下:

Bitmap bmp = BitmapFactory.decodeFile(file, opts);

useThisBitmap = Bitmap.createScaledBitmap(bmp, w, h, true);

bmp.recycle();

通过debug发现useThisBitmap里的buffer在执行bmp.recycle();后变为null。

当时就闪现一个猜测,是不是w和h与bmp的宽高一致时createScaledBitmap就直接返回bmp本身了,这样bmp.recycle();自然会导致crash。

于是就看createScaledBitmap的函数提示:

Creates a new bitmap, scaled from an existing bitmap, when possible.

 If the specified width and height are the same as the current width and height of the source btimap, 

the source bitmap is returned and now new bitmap is created.

这句话能看明白吗? 好像有奇异吧,事实上它应该只返回了source bitmap没有去创建。

将代码改成:

if (bmp.getWidth() == w && bmp.getHeight() == h) {
useThisBitmap = bmp;
} else {
useThisBitmap = Bitmap.createScaledBitmap(bmp, w, h, true);
bmp.recycle();
}

ok啦! 问题解决。



原创粉丝点击