Bitmap mBi = Bitmap.createBitmap(100, 100, Config.ALPHA_8);
这句是什么意思?
在这句之后有一句(mCan是一个canvas对象)
mCan = new Canvas(mBi);
什么作用?
如果我换成
Bitmap tempBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.pdf);
mBi = Bitmap.createBitmap(tempBitmap);
mCan = new Canvas(mBi);
这样就会强制退出,怎么解决?
我现在的想法就是让他先绘制一张自己的图。
------解决方案--------------------
Bitmap mBi = Bitmap.createBitmap(100, 100, Config.ALPHA_8);
这句是根据参数创建一个新的位图,前一个100表示宽,后一个表示高,最后一个参数是系统的配置信息(内部类Bitmap.Config类,是一个枚举,有ALPHA_8, ARGB_4444,ARGB_8888,RGB_565,他们都是色彩的存储方法 )
我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值
说白了就ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位
由此可见:
ALPHA_8 代表8位Alpha位图
ARGB_4444 代表16位ARGB位图
ARGB_8888 代表32位ARGB位图
RGB_565 代表8位RGB位图
位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真
------解决方案--------------------
Bitmap mBi = Bitmap.createBitmap(100, 100, Config.ALPHA_8);// 宽、高、画质
创建的bitmap是可变的。
Bitmap tempBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.pdf);
创建的是不可变的。
Canvas(Bitmap bitmap)构造函数创建一个画布,需要可变的bitmap做参数
通俗的理解就是画布上的图片要是能够被改变的,不然怎么能在上面画图呢~
------解决方案--------------------
Bitmap mBi = Bitmap.createBitmap(100, 100, Config.ALPHA_8);
是对应Bitmap类的createBitmap (int width, int height, Bitmap.Config config)
而Bitmap.Config类有四个常量,ALPHA_8 ,ARGB_4444 ,ARGB_8888 ,RGB_565
而这个方法官方的解释是:Returns a mutable bitmap with the specified width and height
也就是说会返回一个可以修改的bitmap用指定的宽高,第三个参数指的是返回的bitmap的透明度
而你给出的方法:
Bitmap tempBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.pdf);
mBi = Bitmap.createBitmap(tempBitmap);
mCan = new Canvas(mBi);
返回的mBi是一个immutable也就是不可修改的Bitamp,new Canvas(mBi)就是说使用mBi当做画板作图,试想一下你这种mBi是不可变,如果你要强行在它上面进行作画,你说他会不会强行退出