![7c0339c74e6f415550c02bccdcf2b123.png](https://i-blog.csdnimg.cn/blog_migrate/2fa65f132c792304b5c69cd4ef54bb44.png)
RGB概述
RGB是red,green, blue的简写,也就是红绿蓝三种颜色。他们是三原色,通过不同的比例相加,以产生多种多样的色光。
![994fe2614a827b7770204ada06cb0af4.png](https://i-blog.csdnimg.cn/blog_migrate/f373ed277d9412faca3e19912a12474b.jpeg)
RGB格式
一般来说,RGB在计算机中的表示主要分为两大类,一种是索引形式,一种是像素形式:
(1)索引格式:
- 索引格式是计算机早期的一种格式,它的优点比较节省空间,缺点是表现的色彩有限,目前格式基本被抛弃了,不再被使用,这里只做简单介绍。
- 索引格式中的bit存储的并非是实际的R,G, B值,而是对应点的像素在调色板中的索引。
- 调色板,可以简单理解为通过编号映射到颜色的一张二维表。如01索引,表示红色。采用索引格式的RGB,红色的像素对应存储的值便是索引01。就像指针一样,存储的是值的地址,而不是真正的值。
RGB1
每个像素用1个bit表示,可表示的颜色范围为双色,即黑和白。1个bit只能表示0,1两种值。需要调色板,不过调色板只包含两种颜色。
RGB4
每个像素用4个bit表示,4个bit所能够表示的索引范围是0-15,共16个。也就是可以表示16种颜色。即调色板中包含16中颜色。
RGB8
每个像素用8个bit表示。8个bit所能够表示的索引范围是0-255,共256个。也就是可以表示256中颜色。即调色板中包含256中颜色。
(2)像素格式:
RGB像素格式中的bit存储的是每一个像素点的R,G,B值
RGB565
一个像素用16个bit = 2个字节表示 ,R=5 G=6 B=5
![4ab13cd02c1795fb23118d8adcd2adaa.png](https://i-blog.csdnimg.cn/blog_migrate/24ea56b44ff146daae705fde407e9402.jpeg)
R
RGB555
一个像素用16个bit = 2个字节,但是最高位不用,R=5 G=5 B=5
![8f90a48f1fba953cb95dd3ccc6feeb8e.png](https://i-blog.csdnimg.cn/blog_migrate/e9936ad938fcdeb2ab47e93e7230012b.jpeg)
R
RGB24
一个像素用24个bit = 3个字节来表示,R=8 G=8 B=8
![e672dcdc9fdc0f1194ff44221783da5c.png](https://i-blog.csdnimg.cn/blog_migrate/97b64aeb665ceb8f463d5297875053f9.jpeg)
R
RGB32
一个像素用32个bit = 4个字节 来表示,R=8 G=8 B=8,存储顺序为B, G, R,最后8个字节保留。
![595b0a1f9bd5ac36404cfb71ba636785.png](https://i-blog.csdnimg.cn/blog_migrate/393f49b0051c278e261cebc9858318d6.jpeg)
R
Android平台下的几个常用RGB格式:
Bitmap.Config.ALPHA_8
每个像素用8比特位表示,占1个字节,只有透明度,没有颜色。
Bitmap.Config.RGB_565
每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位,见上图。
Bitmap.Config.ARGB_4444
每个像素用16比特位表示,占2个字节,由4个4位组成,ARGB分量都是4位。
Bitmap.Config.ARGB_8888
每个像素用32比特位表示,占4个字节,由4个8位组成,ARGB分量都是8位。
注意:java默认使用大端字节序,c/c++默认使用小端字节序,android平台下Bitmap.config.ARGB_8888的Bitmap默认是大端字节序,当需要把这个图片内存数据给小端语言使用的时候,就需要把大端字节序转换为小端字节序。例如:java层的ARGB_565传递给jni层使用时,需要把java层的ARGB_565的内存数据转换为BGRA565。