與設備無關的位圖

與設備無關的位圖

ID:37766279

大?。?3.09 KB

頁數(shù):18頁

時間:2019-05-30

與設備無關的位圖_第1頁
與設備無關的位圖_第2頁
與設備無關的位圖_第3頁
與設備無關的位圖_第4頁
與設備無關的位圖_第5頁
資源描述:

《與設備無關的位圖》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫

1、與設備無關的位圖(DIB) DIB(Device-indepententbitmap)的與設備無關性主要體現(xiàn)在以下兩個方面:DIB的顏色模式與設備無關。例如,一個256色的DIB即可以在真彩色顯示模式下使用,也可以在16色模式下使用。256色以下(包括256色)的DIB擁有自己的顏色表,像素的顏色獨立于系統(tǒng)調(diào)色板?!  ∮捎贒IB不依賴于具體設備,因此可以用來永久性地保存圖象。DIB一般是以*.BMP文件的形式保存在磁盤中的,有時也會保存在*.DIB文件中。運行在不同輸出設備下的應用程序可以通過DIB來交換圖象。DIB還可以用一種RLE算法來壓縮圖像數(shù)據(jù),但一般來說DIB是不壓縮的。1

2、1.4.1DIB的結構  與BorlandC++下的框架類庫OWL不同,MFC未提供現(xiàn)成的類來封裝DIB。盡管Microsoft列出了一些理由,但沒有DIB類確實給MFC用戶帶來很多不便。用戶要想使用DIB,首先應該了解DIB的結構。  在內(nèi)存中,一個完整的DIB由兩部分組成:一個BITMAPINFO結構和一個存儲像素陣列的數(shù)組。BITMAPINFO描述了位圖的大小,顏色模式和調(diào)色板等各種屬性,其定義為typedefstructtagBITMAPINFO{BITMAPINFOHEADERbmiHeader;RGBQUADbmiColors[1];//顏色表}BITMAPINFO;RGB

3、QUAD結構用來描述顏色,其定義為typedefstructtagRGBQUAD{BYTErgbBlue;//藍色的強度BYTErgbGreen;//綠色的強度BYTErgbRed;//紅色的強度BYTErgbReserved;//保留字節(jié),為0}RGBQUAD;注意,RGBQUAD結構中的顏色順序是BGR,而不是平常的RGB。BITMAPINFOHEADER結構包含了DIB的各種信息,其定義為typedefstructtagBITMAPINFOHEADER{DWORDbiSize;//該結構的大小LONGbiWidth;//位圖的寬度(以像素為單位)LONGbiHeight;//位圖

4、的高度(以像素為單位)WORDbiPlanes;//必須為1WORDbiBitCount//每個像素的位數(shù)(1、4、8、16、24或32)DWORDbiCompression;//壓縮方式,一般為0或BI_RGB(未壓縮)DWORDbiSizeImage;//以字節(jié)為單位的圖象大小(僅用于壓縮位圖)LONGbiXPelsPerMeter;//以目標設備每米的像素數(shù)來說明位圖的水平分辨率LONGbiYPelsPerMeter;//以目標設備每米的像素數(shù)來說明位圖的垂直分辨率DWORDbiClrUsed;/*顏色表的顏色數(shù),若為0則位圖使用由biBitCount指定的最大顏色數(shù)*/DWOR

5、DbiClrImportant;//重要顏色的數(shù)目,若該值為0則所有顏色都重要}BITMAPINFOHEADER;  與DDB不同,DIB的字節(jié)數(shù)組是從圖象的最下面一行開始的逐行向上存儲的,也即等于把圖象倒過來然后在逐行掃描。另外,字節(jié)數(shù)組中每個掃描行的字節(jié)數(shù)必需是4的倍數(shù),如果不足要用0補齊。DIB可以存儲在*.BMP或*.DIB文件中。DIB文件是以BITMAPFILEHEADER結構開頭的,該結構的定義為typedefstructtagBITMAPFILEHEADER{WORDbfType;//文件類型,必須為“BM”DWORDbfSize;//文件的大小WORDbfReserv

6、ed1;//為0WORDbfReserved2;//為0DWORDbfOffBits;//存儲的像素陣列相對于文件頭的偏移量}BITMAPFILEHEADER;  緊隨該結構的是一個BITMAPINFOHEADER結構,然后是RGBQUAD結構組成的顏色表(如果有的話),文件最后存儲的是DIB的像素陣列?! IB的顏色信息儲存在自己的顏色表中,程序一般要根據(jù)顏色表為DIB創(chuàng)建邏輯調(diào)色板。在輸出一幅DIB之前,程序應該將其邏輯調(diào)色板選入到相關的設備上下文中并實現(xiàn)到系統(tǒng)調(diào)色板中,然后再調(diào)用相關的GDI函數(shù)(如::SetDIBitsToDevice或::StretchDIBits)輸出DI

7、B。在輸出過程中,GDI函數(shù)會把DIB轉換成DDB,這項工作主要包括以下兩步:將DIB的顏色格式轉換成與輸出設備相同的顏色格式。例如,在真彩色的顯示模式下要顯示一個256色的DIB,則應該將其轉換成24位的顏色格式。將DIB像素的邏輯顏色索引轉換成系統(tǒng)調(diào)色板索引?!?1.4.2編寫DIB類  由于MFC未提供DIB類,用戶在使用DIB時將面臨繁重的WindowsAPI編程任務。幸運的是,VisualC++提供了一個較高層次的API,簡化了DIB

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。