Android显示系统之Pixel、Bitmap、Drawable、Canvas、Paint和Matrix之间的联系

2014-11-24 11:04:09 · 作者: · 浏览: 1

1、Pixel与Bitmap


Pixel




Bitmap




1.1、定义:


Bitmap称作位图,又称栅格图(英语:Raster graphics)或称点阵图,是使用像素阵列来表示的图像,每个像素的颜色信息由RGB组合或者灰度值表示。根据颜色信息所需的数据位分为1、4、8、16、24及32位等,位数越高颜色越丰富,相应的数据量越大。其中使用1位表示一个像素颜色的位图因为一个数据位只能表示两种颜色,所以又称为二值位图。通常使用24位RGB组合数据位表示的的位图称为真彩色位图。一般来说,位图是没有经过压缩的,位图文件体积比较大。(位图常用的压缩算法是通过“索引颜色表”实现的),位图大多支持alpha通道(透明通道)。


1.2、编码方式:



RGB编码方式

位图颜色的一种编码方法,用红、绿、蓝三原色的光学强度来表示一种颜色。这是最常见的位图编码方法,可以直接用于屏幕显示。


CMYK编码方式

位图颜色的一种编码方法,用青、品红、黄、黑四种颜料含量来表示一种颜色。常用的位图编码方法之一,可以直接用于彩色印刷。


1.3、色彩深度


色彩深度又叫色彩位数,即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8 位(256色),16位(增强色),24位和32位(真彩色)等。色深16位以上的位图还可以根据其中分别表示RGB三原色或CMYK四原色(有的还包括 Alpha通道)的位数进一步分类,如16位位图图片还可分为R5G6B5,R5G5B5X1(有1位不携带信息),R5G5B5A1,R4G4B4A4 等等。




1.4、在这里不得不提一下矢量图:


矢量图定义:


矢量图[vector],也叫做向量图,简单的说,就是缩放不失真的图像格式。矢量图是通过多个对象的组合生成的,对其中的每一个对象的纪录方式,都是以数学函数来实现的,也就是说,矢量图实际上并不是象位图那样纪录画面上每一点的信息,而是纪录了元素形状及颜色的算法,当你打开一付矢量图的时候,软件对图形象对应的函数进行运算,将运算结果[图形的形状和颜色]显示给你看。无论显示画面是大还是小,画面上的对象对应的算法是不变的,所以,即使对画面进行倍数相当大的缩放,其显示效果仍然相同[不失真]。(位图缩放会失真)


(以上参考于wikipedia


1.5、在Android中得到一个Bitmap对象的方法



1.5.1、使用常用的静态方法获取Bitmap对象:


1.5.2、使用BitmapFactory工厂类获取Bitmap对象



BitmapFactory工厂类是一个工具类,提供了大量的方法,大多数是从不同的数据源来解码、创建Bitmap对象,典型方法如下。


1.5.3、使用BitmapDrawable获取Bitmap对象


BitmapDrawable继承于Drawable


1.6、附上Bitmap与byte[]的转换关系


1.6.1、Bitmap2Bytes


2、Drawable


当在Android工程的Drawable文件夹中导入图像文件时,Android SDK会为这个文件生成一个Drawable对象。可以通过R.drawable的方式访问这个对象。一般是调用Resource.getDrawable(int id)的方式直接获取。


Drawable 文件夹支持的图像格式有GIF、PNG、JPG,BMP。


2.1、Bitmap与Drawable的转换关系




2.1.1、Bitmap转为Drawable:


2.1.2、Drawable转为Bitmap


参考第一点获取Bitmap的方法1.5.3。


3、Canvas 、Paint


理解Canvas对象,可以把它当做画布,Canvas的方法大多数是设置画布的大小、形状、画布背景颜色等等,要想在画布上面画画,一般要与Paint对象结合使用,顾名思义,Paint就是画笔的风格,颜料的色彩之类的。


4、Matrix




Matrix为矩阵的意思,一般用来与Bitmap配合,实现图像的缩放、变形、扭曲等操作。





Matrix类的其他典型方法。