No.
2022-08-29
  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

认识RGB

RGB 简介

RGB 色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

RGB 格式

索引形式

RGB1,RGB4,RGB8,是调色板类型的RGB格式,它们的值代表调色板中的索引。

RGB1:每个像素用 1 个 bit 表示 0,1 两种值,可表示的索引范围是 0~1,调色板只包含两种颜色。
RGB4:每个像素用 4 个 bit 表示,4 个 bit 所能够表示的索引范围是 0~15,共 16 个。也就是可以表示 16 种颜色。即调色板中包含 16 中颜色。
RGB8:每个像素用 8 个 bit 表示。8 个 bit 所能够表示的索引范围是 0~255,共 256 个。也就是可以表示 256 种颜色。即调色板中包含 256 种颜色。

像素格式

RGB16 格式

RGB16 数据格式主要有两种:RGB565 和 RGB555。

  1. RGB555

    每一个像素用 16 个 bit(2个字节)来表示,但最高位不用,R 用 5 个 bit、G 用 5 个 bit、B 用 5 个 bit 表示。

    如下图:
    RGB555.svg

    获取像素值方法:

     #define RGB555_MASK_RED 0x7C00
     #define RGB555_MASK_GREEN 0x03E0
     #define RGB555_MASK_BLUE 0x001F
     R = (color & RGB555_MASK_RED) >> 10; // 获取高字节 5 个 bit  
     G = (color & RGB555_MASK_GREEN) >> 5; // 获取中间的 5 个 bit  
     B = color & RGB555_MASK_BLUE; // 获取低字节 5 个 bit  
    
  2. RGB565

    每一个像素用 16 个 bit(2 个字节)来表示,R 用 5 个 bit、G 用 6 个 bit、B 用 5 个 bit 表示。

    如下图:
    RGB565.svg

    获取像素值方法:

     #define RGB565_MASK_RED 0xF800
     #define RGB565_MASK_GREEN 0x07E0
     #define RGB565_MASK_BLUE 0x001F
    
     R = (color & RGB565_MASK_RED) >> 11; // 获取高字节 5 个 bit  
     G = (color & RGB565_MASK_GREEN) >> 5; // 获取中间的 6 个 bit  
     B = color & RGB565_MASK_BLUE; // 获取低字节 5 个 bit
    

RGB24(RGB888)格式

RGB24使用 24 位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。

如下图:
RGB24.svg

获取像素值方法:

#define RGB24_MASK_RED 0xFF0000
#define RGB24_MASK_GREEN 0x00FF00
#define RGB24_MASK_BLUE 0x0000FF
R = (color & RGB24_MASK_RED) >> 16;
G = (color & RGB24_MASK_GREEN) >> 8;
B = color & RGB24_MASK_BLUE;

RGB32 格式

每个像素用 32 比特位表示,占 4 个字节,R,G,B,X 分量都使用 8 位。X 为保留字节。

如下图:
RGB32.svg

获取像素值方法:

#define RGB32_MASK_RED 0xFF000000
#define RGB32_MASK_GREEN 0x00FF0000
#define RGB32_MASK_BLUE 0x0000FF00
#define RGB32_MASK_X 0x000000FF
R = (color & RGB32_MASK_RED) >> 24;
G = (color & RGB32_MASK_GREEN) >> 16;
B = (color & RGB32_MASK_BLUE) >> 8;
X = color & RGB32_MASK_X;

ARGB32

与 RGB32 的区别在于,保留的 8 个 bit 用来表示透明度,也就是 alpha 的值。

如下图:
ARGB32.svg

获取像素值方法:

#define ARGB_MASK_RED 0xFF000000
#define ARGB_MASK_GREEN 0x00FF0000
#define ARGB_MASK_BLUE 0x0000FF00
#define ARGB_MASK_ALPHA 0x000000FF
R = (color & ARGB_MASK_RED) >> 24;
G = (color & ARGB_MASK_GREEN) >> 16;
B = (color & ARGB_MASK_BLUE) >> 8;
A = color & ARGB_MASK_ALPHA;

参考
音视频入门-01-认识RGB
音视频多媒体开发基础概述之颜色格式(1)RGB颜色格式