在用android的Canvas画图时,调用Canvas.setBitmap方法报错,IllegalStateException
来源:互联网 发布:淘宝商城冰箱价格 编辑:程序博客网 时间:2024/06/07 04:04
为了实现类似于QQ发送图片之前可以编辑的功能,我调用了如下方法简单的两汉代码:
// 创建一个与该View大小相同的缓冲区cacheBitmap = Bitmap.createBitmap(BitmapFactory.decodeFile(picPath));// 设置cacheCanvas将会绘制到内存中的cacheBitmap上cacheCanvas.setBitmap(cacheBitmap);
运行程序后报错,报错提示如下图:
百思不得其解的我去网上查了一下,发现每一次次创建Bitmap对象的时候,这个对象都会有一个mutable属性,意思为是否可变的,我们调用
bitmap.isMutable()
发现如果通过:
BitmapFactory.decodeFile(String path)
方法创建的bitmap对象,isMutable是为false,也就是说这个bitmap是不可变的 。
但如果用
Bitmap.createBitmap(int width, int height,Config config)
BitmapFactory.decodeResource(Resources res, int id)
这两类方法创建的时候,isMutable是为true,所以我们可以知道,如果要
cacheCanvas.setBitmap(cacheBitmap);
这个方法不报错,那么传入的Bitmap参数的isMutable()一定是要为true才行,所以为了实现这个功能,我们可以在
BitmapFactory.decodeFile(String path)
这个方法创建出来的Bitmap对象再做一次转化,注意这里比较奇怪的是mutable这个属性并没有相应的setMutable方法,所以要用如下代码来解决这个问题 :
//第一次获取手机的图片Bitmap temp = BitmapFactory.decodeFile(picPath);//对这个Bitmap做一次转化,是它的isMutable为trueBitmap mBitmap = Bitmap.createScaledBitmap(temp, temp.getWidth(), temp.getHeight(), false);// 设置cacheCanvas将会绘制到内存中的cacheBitmap上cacheCanvas.setBitmap(mBitmap);
这样就可以成功解决这个奇怪的问题啦
0 0
- 在用android的Canvas画图时,调用Canvas.setBitmap方法报错,IllegalStateException
- android 用Canvas 编辑图片报java.lang.IllegalStateException错的解决办法
- Android 用canvas画图
- Android canvas上画图时改变canvas
- canvas.toDataURL方法调用报错(Uncaught SecurityError)的解决
- android canvas实现在图片上画图
- Android Canvas 画图
- android画图之canvas
- Android 中的Canvas画图
- Android画图之Canvas
- Android 画图 canvas
- Android 中的Canvas画图
- android canvas画图
- Android中Canvas画图
- Android利用Canvas画图
- 在屏幕 preview 画图 Canvas 的用法
- Android中canvas画图的简单应用
- Android 中的Canvas画图
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- 面试题:阿里 改造站点
- 2015-08-12
- activity属性设置大全
- python快速使用(一)概要
- 在用android的Canvas画图时,调用Canvas.setBitmap方法报错,IllegalStateException
- Java中如何遍历Map对象的4种方法
- Consumable Media Types
- Otto介绍
- bisection bandwidth
- iPhone屏幕尺寸、分辨率及适配
- HDU 4291 A Short problem // 矩阵快速幂, 循环节
- 面试题:阿里 天猫积分换魔盒
- 多线程:线程状态、synchronized关键字、读写锁、条件对象、Volatile、阻塞队列等小结