音視頻基礎知識---像素格式RGB

音視頻基礎知識彙總:

 

RGB概述

RGB是red,green, blue的簡寫,也就是紅綠藍三種顏色。他們是三原色,通過不同的比例相加,以產生多種多樣的色光。

 

 

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

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個字節來表示,R=8 G=8 B=8

 

R = color & 0x0000FF00; 

G = color & 0x00FF0000; 

B = color & 0xFF000000;

 

RGB32

一個像素用32個bit = 4個字節 來表示,R=8 G=8 B=8,存儲順序爲B, G, R,最後8個字節保留。

 

R = color & 0x0000FF00; 

G = color & 0x00FF0000; 

B = color & 0xFF000000; 

A = color & 0x000000FF;

 

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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章