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啦! 问题解决。
- Bitmap.createScaledBitmap的陷阱
- Bitmap.createScaledBitmap的陷阱
- public static Bitmap createScaledBitmap(
- 关于BItmap.createScaledBitmap释放内存引发的bug
- 【bug】:Bitmap.createScaledBitmap不能满屏
- public static Bitmap createScaledBitmap(Bitmap unscaledBitmap, int dstWidth, int dstHeight,
- createScaledBitmap参数
- '\'的陷阱
- :?的陷阱
- Delphi的接口陷阱
- TWebBrowser的Cache陷阱
- groovy 的陷阱
- 决策者的七大陷阱
- 公司政治的陷阱
- iterator的陷阱
- typedef的两个陷阱
- assert的陷阱
- 盖茨的陷阱
- 国外大学免费硕博全文数据库以及部分期刊全文
- 视频的Level有什么作用
- 新浪微博布局学习——妙用TabHost
- 如何利用Object Browser图形化工具提高Oracle开发工作效率(一)SQL编写调试篇
- Android平台aac谷歌软解框架和流程、解码库学习
- Bitmap.createScaledBitmap的陷阱
- (AI-TANK)走直线,撞墙折返
- 如何利用Object Browser图形化工具提高Oracle开发工作效率(二)对象创建管理篇
- (AI-TANK)走八字
- 等死模式与穿越模式
- 安装android环境搭建
- SugarNMS 工业交换机网管软件
- Hibernate从入门到精通(五)一对一单向关联映射
- 【第十三章】 测试 之 13.3 集成测试 ——跟我学spring3