`
wangxuefang
  • 浏览: 120731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android Bitmap.Config的用法介绍

 
阅读更多

     在了解Bitmap.Config之前,首先应该了解一下一种颜色的组成。简单的说,世界上任何一种颜色的"颜色空间"都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。      

     Bitmap.Config在官网中解释为:Bitmap的配置,用于描述和保存图片相素的保存方式。在android中其有四种:

       <1>ALPHA_8 像素以半透明的形式保存,且在内存中一个像素占8位,即一个字节。透明度为半透明,无法设置

     <2>ARGB_4444 引入了透明度的设置,A透明度  R 红色 G绿色 B蓝色,每种占4位,一个相素总共点16位,2个字节,此种方式占用内存较小,但图片会造成模糊现象。在API_leavel 13中已过时,被ARGB_8888代替。

     <3>ARGB_8888 解释同上,但一个相素点32位,4个字节。这种方式占用内存较多,但最清楚。

     <4>RGB_565 R 占5位,G 占6位 ,B 占5位,无法设置透明度,一个相素占16位,两个字节。

对于上述几种配置,视情况使用,占位越多,内存越大,但图像颜色越多。如RGB565最多只能表示2^16=65536种图像,这对于RGB888所能表示的2^24=16777216种颜色来说显然在表现力上要略逊一筹。这集中表现在显示某些带有渐变效果的图片时,出现了一条条的颜色带,而不是原始的平滑的渐变效果。后来得知android使用了Dither(抖动)这种技术,以欺骗人类眼球的方式加以补偿。

     

public static Bitmap drawableToBitmap(Drawable drawable) { 
        // 取 drawable 的长宽 
        int w = drawable.getIntrinsicWidth(); 
        int h = drawable.getIntrinsicHeight(); 
        // 取 drawable 的颜色格式 
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 
                : Bitmap.Config.RGB_565; 
        // 建立对应 bitmap 
        Bitmap bitmap = Bitmap.createBitmap(w, h, config); 
        // 建立对应 bitmap 的画布 
        Canvas canvas = new Canvas(bitmap); 
        drawable.setBounds(0, 0, w, h); 
        // 把 drawable 内容画到画布中 
        drawable.draw(canvas); 
        return bitmap; 
    }

 

 另外可参考资料

http://wangxuefang.iteye.com/admin/blogs/1956708  关于位图颜色模式的一些android处理机制和说明。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics