图像基础:BMP、RGB、JPG、PNG等格式详解(二)

RGB格式概述

对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。

RGB格式的类别

简单来讲,RGB在计算机中的表示主要分为两大类,一种是索引形式,一种是像素形式
(1) 索引:
诸如RGB1, RGB4,RGB8,分别表示每个像素用1个bit, 4个bit, 8个bit来表示,那么,这些bit存储的并非是实际的R,G, B值,而是对应点的像素在调色板中的索引。
(2) 像素形式:
诸如RGB565,RGB555, RGB24,RGB32,ARGB32,这些格式,存储的是每一个像素点的R,G,B值。比如RGB24,分别用8个bit去表示R, G, B。

RGB的索引形式

注释:关于调色板,可以简单理解为通过编号映射到颜色的一张二维表。如01索引,表示红色。采用索引格式的RGB,红色的像素对应存储的值便是索引01.

RGB索引格式简介:
1.RGB1:
每个像素用1个bit表示,可表示的颜色范围为双色,即最传统的黑和白。1个bit只能表示0,1两种值。需要调色板,不过调色板只包含两种颜色。
2.RGB4:
每个像素用4个bit表示,4个bit所能够表示的索引范围是0-15,共16个。也就是可以表示16种颜色。即调色板中包含16中颜色。
3.RGB8:
每个像素用8个bit表示。8个bit所能够表示的索引范围是0-255,共256个。也就是可以表示256中颜色。即调色板中包含256中颜色。

RGB的像素形式

目前常见的格式如下:
RGB565--------每个像素用16位表示,RGB分量分别使用5位、6位、5位
RGB555--------每个像素用16位表示,RGB分量都使用5位(剩下1位不用)
RGB24----------每个像素用24位表示,RGB分量各使用8位
RGB32----------每个像素用32位表示,RGB分量各使用8位(剩下8位不用)
ARGB32--------每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)

1、RGB565:

RGB565格式每一个像素用16个bit来表示,2个字节,1个WORD, R, G, B分别用5, 6, 5个bit来表示,格式也因此而得名。

排列顺序为:
高字节                     低字节
R R R R R G G G    G G G B B B B B

根据RGB565的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为short. 那么则有:
R = color & 0xF800, (获取高字节的5个bit)
G = color & 0x07E0, (获取中间6个bit)
B = color & 0x001F, (获取低字节5个bit)

1、RGB555:

RGB55, 表示一个像素用16个bit来表示,2个字节,1个WORD,但是最高位不用,R, G, B分别用5个bit来表示。

排列顺序为:
高字节                     低字节
X R R R R R G G    G G G B B B B B

(X代表保留)

根据RGB565的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为short. 那么则有:
R = color & 0x7C00, (获取高字节的5个bit)
G = color & 0x03E0, (获取中间5个bit)
B = color & 0x001F, (获取低字节5个bit)

3、RGB24:

RGB24, 一个像素用24个bit来表示,3个字节,R, G, B分量分别用8个bit来表示,取值范围为0-255。
注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。

排列顺序为:
高字节                                                      低字节
B B B B B B B B    G G G G G G G G    R R R R R R R R

根据RGB24的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为int. 那么则有:
R = color & 0x000000FF,
G = color & 0x0000FF00,
B = color & 0x00FF0000,

4、RGB32:

RGB32使用32位来表示一个像素,4个字节,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB24。)
注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。

排列顺序为:
高字节                                                                                     低字节
B B B B B B B B    G G G G G G G G    R R R R R R R R    X X X X X X X X

(X代表保留)

根据RGB32的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为int. 那么则有:
R = color & 0x0000FF00
G = color & 0x00FF0000,
B = color & 0xFF000000,

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值