常見圖片格式分析
一. 影象的基本結構:
1. 在計算機中, 影象是由一個個畫素點組成,畫素點就是顏色點,而顏色最簡單的方式就是用RGB或RGBA表示;
2. 如果有A通道就表明這個影象可以有透明效果;R,G,B每個分量一般是用一個位元組(8位)來表示;
3. 影象是二維資料,資料在記憶體中只能一維儲存,二維轉一維有不同的對應方式;比較常見的只有兩種方式: 按畫素“行排列”從上往下或者從下往上;
(1) 如圖所示的影象有9個畫素點,如果從上往下排列成一維資料是(123456789), 如果是從下往上排列則為(789456123);
(2) 只所以會有這種區別是因為,前一種是以計算機圖形學的螢幕座標系為參考(
(3) 不過好像只有bmp圖片格式以及windows下的GDI,GDI+是從下往上排列;其它比如DirectX,OpenGL,Cocoa(NSImage,UIImage),OpenCV等都是從上往下排列;
4. RGB排列順序:
(1) 不同圖形庫中每個畫素點中RGBA的排序順序可能不一樣;
(2) 排序順序包括:RGBA;RBGA;GRAB;AGBR;BAGR等24種情況;
(3) 不過一般只會有RGB,BGR, RGBA, BGRA這幾種排列據;絕大多數圖形庫或環境是BGR/BGRA
5. 圖片格式的必要性:
(1) 如果將影象原始格式直接儲存到檔案中將會非常大,比如一個5000*500024點陣圖,所佔檔案大小為5000*5000*3位元組=71.5MB,其大小非常可觀;
(2) 如果用zip或rar之類的通用演算法來壓縮畫素資料,得到的壓縮比例通常不會太高,因為這些壓縮演算法沒有針對影象資料結構進行特殊處理;於是就有了jpeg,png等格式;
(3) jpeg,png檔案之於影象,就相當於zip,rar格式之於普通檔案;jpeg比較適合儲存色彩“雜亂”的拍攝圖片,png比較適合儲存幾何特徵強的圖形類圖片;