现在的位置: 首页 > 综合 > 正文

Android bitmap Config

2017年09月20日 ⁄ 综合 ⁄ 共 1518字 ⁄ 字号 评论关闭

在开发中遇到了一个问题,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.没有透明度

使用示例: 

Java代码  收藏代码
  1. Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);  
  2. Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);  
  3. Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  
  4. Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);  




上面四个函数返回一个可改变的Bitmap对象。 
    假如我们使用Bitmap.Config.ARGB_8888
 

Java代码  收藏代码
  1. protected void onDraw(Canvas canvas) {  
  2.     Bitmap bitmap = Bitmap.createBitmap(100100, Bitmap.Config.ARGB_8888);  
  3.     Canvas c = new Canvas(b);  
  4.     //c.draw...(),通过c可以改变bitmap  
  5.     canvas.draw(bitmap, nullnull);//最后在把bitmap画到canvas上  
  6.     super.onDraw(canvas);  
  7. }  




参见: 
http://developer.android.com/reference/android/graphics/Bitmap.html#createBitmap(int,
int, android.graphics.Bitmap.Config)
一般情况下我们都是用argb888 但是无可厚非 它也相对的很占内存因为一个像素32位 8位一个字节 如果是800*480的图片的话自己算 估计有1M多了
 

抱歉!评论已关闭.