Bitmap.createScaledBitmap的陷阱

本文转载自:http://blog.csdn.net/lishouyi710/article/details/9197653

 在显示图片时其他图片都没问题, 但一些特定图片的显示就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();
}

问题解决。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值