關於C語言的圖片數據結構

關於C語言的圖片讀取和數據結構:(1)

位圖頭

保存文件的總體信息

typedef struct BMP_FILE_HEADER
{
	WORD bType;      // 文件標識符 
	DWORD bSize;     // 文件的大小 
	WORD bReserved1; // 保留值,必須設置爲0  
	WORD bReserved2; // 保留值,必須設置爲0 
	DWORD bOffset;   // 文件頭的最後到圖像數據位開始的偏移量 
} BMPFILEHEADER;     // 14 字節

位圖信息

這部分告訴應用程序圖像的詳細信息,在屏幕上顯示圖像將會使用這些信息

typedef struct BMP_INFO
{
	DWORD bInfoSize;            // 信息頭的大小   
	DWORD bWidth;               // 圖像的寬度     
	DWORD bHeight;              // 圖像的高度     
	WORD bPlanes;               // 圖像的位面數   
	WORD bBitCount;             // 每個像素的位數 
	DWORD bCompression;         // 壓縮類型 
	DWORD bmpImageSize;         // 圖像的大小,以字節爲單位 
	DWORD bXPelsPerMeter;       // 水平分辨率 
	DWORD bYPelsPerMeter;       // 垂直分辨率 
	DWORD bClrUsed;             // 使用的色彩數 
	DWORD bClrImportant;        // 重要的顏色數 
} BMPINF;            // 40 字節

調色板信息

這部分定義了圖像中所用的顏色。如上所述,位圖圖像一個像素接着一個像素儲存,每個像素使用一個或者多個字節的值表示,所以調色板的目的就是要告訴應用程序這些值所對應的實際顏色。
典型的位圖文件使用RGB彩色模型。在這種模型中,每種顏色都是由不同強度(從0到最大強度)的紅色(R)、綠色(G)和藍色(B)組成的,也就是說,每種顏色都可以使用紅色、綠色和藍色的值所定義。
在位圖文件的實現中,調色板可以包含很多條目,條目個數就是圖像中所使用的顏色的個數。每個條目包含4個字節:其中三個表示紅色、綠色和藍色,第四個字節沒有使用(大多數應用程序將它設爲0)。對於每個字節,數值0表示相應的顏色在當前的圖像文件中沒有使用,而數值255表示那個顏色使用最大的強度。

讀取

讀取可以用

FILE* fp = fopen("./threshold.bmp", "rb");

進行讀取,但是這樣並沒有完整,應當讀取爲數組才能繼續後面的處理

圖的定義

圖在C語言中是一類非線性結構,其形式定義爲:
Graph=(V,R)
其中
V={x|x∈datatype},
R={VR},
VR={<x,y>|P(x,y)&(x,y∈V)}

其中,數據元素成爲頂點,V是頂點的有窮集合,R是邊的有窮集合,就是說圖片是由頂點和邊組成的。

圖的存儲結構

圖主要有四種存儲結構:
鄰接矩陣、鄰接表、鄰接多重表和十字鏈表,主要使用的是鄰接舉證和鄰接表
鄰接矩陣是表示頂點之間的相鄰關係的矩陣,有n個頂點的圖G=(V,E)的鄰接矩陣爲n階方陣,定義爲:
A[i,j]=【1 若<i,j>或<j,i>∈VE】【0 else】
將鄰接矩陣中的0、1換成權值,就是網的臨界矩陣,無向圖的鄰接矩陣是對稱矩陣,頂點的度是鄰接矩陣中第i行的元素1之和,有向圖的鄰接矩陣不一定是對成矩陣,頂點的出度是鄰接矩陣中第i行元素之和,入度是鄰接矩陣中第i列的元素之和。
通過鄰接矩陣可容易判斷頂點是否存在邊界,容易計算頂點的度,但是佔用空間只和頂點個數相關,和邊數無關,在邊數較少的時候,空間浪費較大,一般在頂點數較少且邊數密集時使用鄰接矩陣。
鄰接表是節省空間對鄰接矩陣的優化,這裏就不繼續深入學習了。

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