Device-Independent點陣圖
與裝置無關的點陣圖 (DIB) 包含 色彩表格。 色彩表格描述圖元值如何對應至 RGB 色彩值,其描述發出光線所產生的色彩。 因此,DIB 可以在任何裝置上達到適當的色彩配置。 DIB 包含下列色彩和維度資訊:
- 建立矩形影像之裝置的色彩格式。
- 建立矩形影像的裝置解析度。
- 建立映射之裝置的調色盤。
- 將紅色、綠色、藍色 ( RGB ) 三倍對應至矩形影像中圖元的位陣列。
- 資料壓縮識別碼,指出如果有任何) 用來減少位陣列大小,則表示資料壓縮配置 (。
色彩和維度資訊會儲存在 BITMAPINFO 結構中,其中包含BITMAPINFOHEADER結構,後面接著兩個以上的RGBQUAD結構。 BITMAPINFOHEADER結構會指定圖元矩形的維度、描述裝置的色彩技術,以及識別用來減少點陣圖大小的壓縮配置。 RGBQUAD結構會識別出現在圖元矩形中的色彩。
DIB 有兩種:
- 左下角 DIB,其原點位於左下角。
- 由上而下 DIB,其原點位於左上角。
如果 DIB 的高度,如點陣圖資訊標頭結構的 Height 成員所表示,則為正值,它是由下至下 DIB;如果高度為負值,則為由上而下 DIB。 無法壓縮由上而下之 DIB。
色彩格式是以色彩平面和色彩位的計數來指定。 色彩平面的計數一律為 1;色位的計數是 1 代表單色點陣圖、4 代表 VGA 點陣圖,而其他色彩裝置上的點陣圖則為 8、16、24 或 32。 應用程式會藉由呼叫 GetDeviceCaps 函式,以擷取特定顯示器 (或) 印表機使用的色彩位數目,並將 BITSPIXEL 指定為第二個引數。
顯示裝置的解析度是以每公尺圖元為單位來指定。 應用程式可以遵循這三個步驟的程式,擷取視訊顯示器或印表機的水準解析度。
- 呼叫 GetDeviceCaps 函式,並將 HORZRES 指定為第二個引數。
- 第二次呼叫 GetDeviceCaps ,並將 HORZSIZE 指定為第二個引數。
- 將第一個傳回值除以第二個傳回值。
應用程式可以使用具有不同參數的相同三步驟程式來擷取垂直解析:VERTRES 取代 HORZRES,以及 VERTSIZE 取代 HORZSIZE。
調色盤是由 RGBQUAD 結構的陣列來表示,該結構會指定顯示裝置調色盤中每個色彩的紅色、綠色和藍色強度元件。 調色盤陣列中的每個色彩索引都會對應至與點陣圖相關聯之矩形區域中的特定圖元。 這個陣列的大小,以位為單位,相當於矩形的寬度,以圖元為單位,乘以矩形的高度,以圖元為單位,乘以裝置的色彩位元數目。 應用程式可以藉由呼叫 GetDeviceCaps 函式來擷取裝置調色盤的大小,並將 NUMCOLORS 指定為第二個引數。
Windows 支援 8-bpp 和 4-bpp 下拉式 DIB 的調色盤陣列壓縮。 這些陣列可以使用 RLE) 配置的執行時間編碼 (來壓縮。 RLE 配置使用 2 位元組值,第一個位元組,指定使用色彩索引的連續圖元數目,以及指定索引的第二個位元組。 如需點陣圖壓縮的詳細資訊,請參閱BITMAPINFOHEADER、BITMAPFILEHEADER、BITMAPV4HEADER和BITMAPV5HEADER結構的描述。
應用程式可以從 DDB 建立 DIB,方法是初始化所需的結構並呼叫 GetDIBits 函式。 若要判斷裝置是否支援此函式,請呼叫 GetDeviceCaps 函式,並將RC_DI_BITMAP指定為 RASTERCAPS 旗標。
需要複製點陣圖的應用程式可以使用 TransparentBlt ,將來源點陣圖中的所有圖元複製到目的地點陣圖,但符合透明色彩的圖元除外。
應用程式可以使用 DIB 來設定顯示裝置上的圖元,方法是呼叫 SetDIBitsToDevice 或 StretchDIBits 函式 。 若要判斷裝置是否支援 SetDIBitsToDevice 函式,請呼叫 GetDeviceCaps 函式,並將RC_DIBTODEV指定為 RASTERCAPS 旗標。 將RC_STRETCHDIB指定為 RASTERCAPS 旗標,以判斷裝置是否支援 StretchDIBits。
只需要顯示預先存在的 DIB 的應用程式可以使用 SetDIBitsToDevice 函式。 例如,試算表應用程式可以開啟現有的圖表,並使用 SetDIBitsToDevice 函式在視窗中顯示它們。 不過,若要在視窗中重複重新繪製點陣圖,應用程式應該使用 BitBlt 函式。 例如,結合動畫圖形與音效的多媒體應用程式可受益于呼叫 BitBlt 函式,因為它的執行速度比 SetDIBitsToDevice更快。