DDB與DIB的區別
DDB(設備相關位圖)
DDB依賴于具體設備:
DDB的顏色模式必需與輸出設備相一致。例如,如果當前的顯示設備是256色模式,那么DDB必然也是256色的。
在256色以下的位圖中存儲的像素值是系統調色板的索引,其顏色依賴于系統調色板。
由于DDB高度依賴輸出設備,所以DDB只能存在于內存中,它要么在視頻內存中,要么在系統內存中
DIB的與設備無關性主要體現在以下兩個方面:
DIB的顏色模式與設備無關。例如,一個256色的DIB即可以在真彩色顯示模式下使用,也可以在16色模式下使用。
256色以下(包括256色)的DIB擁有自己的顏色表,像素的顏色獨立于系統調色板。
由于DIB不依賴于具體設備,因此可以用來永久性地保存圖象。DIB一般是以*.BMP文件的形式保存在磁盤中的,有時也會保存在*.DIB文件中。運行在不同輸出設備下的應用程序可以通過DIB來交換圖象
DDB的創建
MFC的CBitmap類封裝了DDB。該類提供了幾個函數用來創建DDB:
BOOL LoadBitmap( LPCTSTR lpszResourceName );
BOOL LoadBitmap( UINT nIDResource );
該函數從資源中載入一幅位圖,若載入成功則返回TRUE。資源位圖實際上是一個DIB,該函數在載入時把它轉換成了DDB。
BOOL CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits );
該函數用來創建一幅空白的DDB。參數nWidth和nHeight以像素為單位說明了位圖的寬度和高度。nPlanes是DDB的色平面數,nBitcount是每個色平面的顏色位數。一般來說,nPlanes為1,而nBitcount代表DDB中每個像素值所占的位數,但在創建16色DDB時,nPlanes為4,而nBitcount為1。參數lpBits指向存儲像素陣列的數組,該數組應該逐行存儲位圖的每個像素值。注意,數組中每行像素的數目必需是偶數個字節,如果是奇數,則應該用0補足。若創建成功函數返回TRUE。
BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nHeight );
該函數創建一個與指定設備上下文兼容的DDB。參數pDC指向一個設備上下文,nWidth和nHeight是DDB的尺寸。若創建成功函數返回TRUE
DIB(設備無關位圖)
至于DIB,MFC未提供現成的類來封裝DIB。要想使用DIB,首先應該了解DIB的結構。這個你可以
到任何一本圖像處理資料中找到詳細說明。
DIB的顏色信息儲存在自己的顏色表中,程序一般要根據顏色表為DIB創建邏輯調色板。在輸出一幅DIB之前,程序應該將其邏輯調色板選入到相關的設備上下文中并實現到系統調色板中,然后再調用相關的GDI函數(如::SetDIBitsToDevice或::StretchDIBits)輸出DIB。在輸出過程中,GDI函數會把DIB轉換成DDB,這項工作主要包括以下兩步:
將DIB的顏色格式轉換成與輸出設備相同的顏色格式。例如,在真彩色的顯示模式下要顯示一個256色的DIB,則應該將其轉換成24位的顏色格式。
將DIB像素的邏輯顏色索引轉換成系統調色板索引。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成