本文轉載自:adolph_lu 的音視頻基礎知識---像素格式RGB
一、RGB概述
RGB 色彩模式是工業界的一種顏色標准,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB 即是代表紅、綠、藍三個通道的顏色,這個標准幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之一。
二、RGB格式
簡單來講,RGB在計算機中的表示主要分為兩大類,一種是索引形式,一種是像素形式:
1. 索引格式
索引格式是計算機早期的一種格式,它的優點比較節省空間,缺點是表現的色彩有限,目前這種格式基本被拋棄了,不再被使用,這里只做簡單介紹。RGB 各索引格式如下:
-
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 種顏色。
索引格式中的 bit 存儲的並非是實際的 R,G, B 值,而是對應點的像素在調色板中的索引。
關於調色板,可以簡單理解為通過編號映射到顏色的一張二維表。如 01 索引,表示紅色。采用索引格式的 RGB,紅色的像素對應存儲的值便是索引 01。就像指針一樣,存儲的是值的地址,而不是真正的值。
2. 像素格式
RGB 像素格式中的 bit 存儲的是每一個像素點的 R,G,B 值。
RGB565
一個像素用16個bit = 2個字節表示 ,R=5、G=6、B=5
R = color & 0xF800; // 獲取高字節的5個bit
G = color & 0x07E0; // 獲取中間6個bit
B = color & 0x001F; // 獲取低字節5個bit
RGB555
一個像素用16個bit = 2個字節,但是最高位不用,R=5、G=5、B=5
R = color & 0x7C00; //獲取高字節的5個bit
G = color & 0x03E0; //獲取中間5個bit
B = color & 0x001F; //獲取低字節5個bit
RGB24
一個像素用24個bit = 3個字節來表示,B=8、G=8、R=8
R = color & 0x7C00; //獲取高字節的5個bit
G = color & 0x03E0; //獲取中間5個bit
B = color & 0x001F; //獲取低字節5個bit
RGB32
一個像素用32個bit = 4個字節 來表示,B=8、G=8、R=8,最后8個字節保留
R = color & 0x0000FF00;
G = color & 0x00FF0000;
B = color & 0xFF000000;
A = color & 0x000000FF;