在开发中遇到了一个问题,bitmap的底色为黑色,百思不得其解,后来想到是不是因为生成bitmap时有个Config参数导致的。
代码中写的是Bitmap.Config.RGB_565。
后来改成Bitmap.Config.RGB_8888 后背景色变为透明
确实是因为Config造成的,之前一直都知道这个参数会导致bitmap的精细程度,也就是说数值越大加载到内存中德bitmap就越大同时也更精细。但是一直没有看到各个数值的含义,这次正好学习了下。
android.graphics.Bitmap.Config是一个枚举类型,里面定义了位图的四种格式.起初有点奇怪,网上查了一下,大概指定了类型名字怪怪的缘由.
从名字中可以看出:
ALPHA_8:数字为8,图形参数应该由一个字节来表示,应该是一种8位的位图
ARGB_4444:4+4+4+4=16,图形的参数应该由两个字节来表示,应该是一种16位的位图.
ARGB_8888:8+8+8+8=32,图形的参数应该由四个字节来表示,应该是一种32位的位图.
RGB_565:5+6+5=16,图形的参数应该由两个字节来表示,应该是一种16位的位图.
网上讲,ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是所字母A代表透明.
ARGB_4444:意味着有四个参数,即A,R,G,B,每一个参数由4bit表示.
同理:
ARGB_8888:意味着有四个参数,即A,R,G,B,每一个参数由8bit来表示.
同理:
RGB_565:意味着有三个参数,R,G,B,三个参数分别占5bit,6bit,5bit.没有透明度
使用示例:
- Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
- Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
- Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
上面四个函数返回一个可改变的Bitmap对象。
假如我们使用Bitmap.Config.ARGB_8888
- protected void onDraw(Canvas canvas) {
- Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(b);
- //c.draw...(),通过c可以改变bitmap
- canvas.draw(bitmap, null, null);//最后在把bitmap画到canvas上
- super.onDraw(canvas);
- }
参见:
http://developer.android.com/reference/android/graphics/Bitmap.html#createBitmap(int, int, android.graphics.Bitmap.Config)一般情况下我们都是用argb888 但是无可厚非 它也相对的很占内存因为一个像素32位 8位一个字节 如果是800*480的图片的话自己算 估计有1M多了