共用方式為


Device-Independent 位陣圖

與裝置無關的點陣圖 (DIB) 包含 色彩資料表。 色彩表格描述圖元值如何對應至 RGB 色彩值,其描述發出光線所產生的色彩。 因此,DIB 可以在任何裝置上達到適當的色彩配置。 DIB 包含下列色彩和維度資訊:

  • 建立矩形影像之裝置的色彩格式。
  • 建立矩形影像的裝置解析度。
  • 建立映像之裝置的調色盤。
  • 將紅色、綠色、藍色 (RGB) 三胞胎對應至矩形影像中的圖元的位數組。
  • 數據壓縮標識碼,指出用來減少位數組大小的數據壓縮配置(如果有的話)。

色彩和維度資訊會儲存在 BITMAPINFO 結構中,其中包含 BITMAPINFOHEADER 結構,後面接著兩個或多個 RGBQUAD 結構。 BITMAPINFOHEADER 結構會指定圖元矩形的維度、描述裝置的色彩技術,以及識別用來減少點陣圖大小的壓縮配置。 RGBQUAD 結構會識別出現在圖元矩形中的色彩。

DIB 有兩個品種:

  • 從下到下 DIB,其原點位於左下角。
  • 頂端 DIB,其原點位於左上角。

如果 DIB 的高度,如位圖資訊標頭結構的 Height 成員所指示,則為正值,它是由下到下 DIB;如果高度為負值,則為由上而下 DIB。 無法壓縮由上到下 DIB。

色彩格式是以色彩平面和色彩位的計數來指定。 色彩平面計數一律為 1;單色位圖的色彩位數為 1,VGA 位圖為 4,其他色彩裝置上的點陣圖為 8、16、24 或 32。 應用程式會藉由呼叫 getDeviceCaps 函式來擷取特定顯示器(或印表機)所使用的色彩位數目,並將BITSPIXEL指定為第二個自變數。

顯示裝置的解析度是以每米像素為單位來指定。 應用程式可以遵循這個三個步驟的程式,擷取視訊顯示或印表機的水平解析度。

  1. 呼叫 getDeviceCaps函式,並將 HORZRES 指定為第二個自變數。
  2. 第二次呼叫 GetDeviceCaps,並將 HORZSIZE 指定為第二個自變數。
  3. 將第一個傳回值除以第二個傳回值。

應用程式可以使用具有不同參數的相同三步驟程式來擷取垂直解析度:VERTRES 取代 HORZRES,以及 VERTSIZE 取代 HORZSIZE。

調色盤是以 RGBQUAD 結構的數位來表示,該結構會指定顯示裝置調色盤中每個色彩的紅色、綠色和藍色強度元件。 調色盤陣列中的每個色彩索引都會對應至與點陣圖相關聯之矩形區域中的特定圖元。 這個陣列的大小,以位為單位,相當於矩形的寬度,以像素為單位,乘以矩形的高度,以像素為單位,乘以裝置的色彩位計數。 應用程式可以藉由呼叫 getDeviceCaps 函式來擷取裝置調色盤的大小,並將 NUMCOLORS 指定為第二個自變數。

Windows 支援壓縮 8-bpp 和 4-bpp 的調色盤陣列。 您可以使用執行長度編碼 (RLE) 配置來壓縮這些數位。 RLE 配置使用 2 位元組值,第一個字節會指定使用色彩索引的連續像素數目,以及指定索引的第二個字節。 如需點圖壓縮的詳細資訊,請參閱 BITMAPINFOHEADERBITMAPFILEHEADERBITMAPV4HEADERBITMAPV5HEADER 結構的描述。

應用程式可以從 DDB 建立 DIB,方法是初始化必要的結構,並呼叫 getDIBits函式。 若要判斷裝置是否支援此函式,請呼叫 GetDeviceCaps 函式,並將RC_DI_BITMAP指定為 RASTERCAPS 旗標。

需要複製位圖的應用程式可以使用 TransparentBlt,將來源位圖中的所有圖元複製到目的地點陣圖,但符合透明色彩的圖元除外。

應用程式可以使用 DIB 在顯示裝置上設定圖元,方法是呼叫 SetDIBitsToDeviceStretchDIBits 函式。 若要判斷裝置是否支援 SetDIBitsToDevice 函式,請呼叫 getDeviceCaps函式,並將RC_DIBTODEV指定為 RASTERCAPS 旗標。 將RC_STRETCHDIB指定為 RASTERCAPS 旗標,以判斷裝置是否支援 StretchDIBits

只需要顯示既有 DIB 的應用程式,可以使用 setDIBitsToDevice函式。 例如,電子表格應用程式可以使用 setDIBitsToDevice 函式,開啟現有的圖表,並將其顯示在視窗中。 不過,若要在視窗中重複重新繪製位圖,應用程式應該使用 BitBlt 函式。 例如,結合動畫圖形與音效的多媒體應用程式,會受益於呼叫 BitBlt 函式,因為它的執行速度比 setDIBitsToDevice 更快。