当前位置: 代码迷 >> Android >> 一个android绘图的有关问题
  详细解决方案

一个android绘图的有关问题

热度:94   发布时间:2016-05-01 22:11:22.0
一个android绘图的问题
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是不可变,如果你要强行在它上面进行作画,你说他会不会强行退出
  相关解决方案