GDI (Graphics Device Interface) 位圖、圖示、游標與光柵運算函式構成 Windows 2D 繪圖核心。涵蓋裝置相關位圖 (DDB)、裝置獨立位圖 (DIB)、DIB Section、圖示/游標資源、位元塊轉移 (BitBlt/StretchBlt)、遮罩繪製、幾何轉換等。本文依功能分類整理核心 API,並說明資源管理關鍵點與現代替代方案。
| 函式 | 用途 | 關鍵參數/備註 |
|---|---|---|
| CreateBitmap / CreateBitmapIndirect | 建立單色/舊式 DDB | 僅支援 1/4/8/16/24/32 bpp,不支援 alpha |
| CreateCompatibleBitmap | 建立與 DC 相容 DDB (最常用) | 自動符合螢幕/印表機色彩格式 |
| CreateDIBitmap | 從 DIB 資料建立 DDB | 需 BITMAPINFOHEADER 描述來源格式 |
| CreateDIBSection | 建立 DIB Section (共享記憶體) | **現代首選**:直接存取像素指標、支援 32bpp alpha、GPU 互操作 |
| LoadBitmap / LoadImage | 從資源/檔案載入位圖 | LoadImage 支援 LR_CREATEDIBSECTION、LR_LOADFROMFILE、LR_DEFAULTSIZE |
| CopyImage | 複製/轉換位圖、圖示、游標 | 可調整尺寸、色彩深度、建立 DIB Section 副本 |
| 函式 | 用途 |
|---|---|
| GetBitmapBits / SetBitmapBits | DDB 像素緩衝區複製 (舊式,不建議) |
| GetDIBits / SetDIBits | DDB ↔ DIB 像素轉換 (指定 BITMAPINFO) |
| GetDIBitsToDevice / SetDIBitsToDevice | DIB 直接繪製至 DC (無縮放) |
| GetBitmapDimensionEx / SetBitmapDimensionEx | 取得/設定位圖實體尺寸 (0.1mm 單位,供列印縮放參考) |
| 函式 | 用途 | ROP 代碼常用值 |
|---|---|---|
| BitBlt | 矩形區域像素複製 (支援 ROP) | SRCCOPY, SRCAND, SRCPAINT, SRCINVERT, SRCERASE, NOTSRCCOPY, PATCOPY, PATINVERT, DSTINVERT, BLACKNESS, WHITENESS |
| StretchBlt | 縮放複製 (支援縮放模式) | 同上,配合 SetStretchBltMode (COLORONCOLOR, HALFTONE, STRETCH_DELETESCANS) |
| MaskBlt | 遮罩位圖合成 (前景/背景 ROP) | 需遮罩位圖 (1bpp),ROP3 碼控制前景/背景混合 |
| PlgBlt | 平行四邊形映射 (旋轉/傾斜) | 三點定義目標平行四邊形,可選遮罩 |
| AlphaBlend | Alpha 通道混合 (需 msimg32.dll) | BLENDFUNCTION 結構,支援 per-pixel/constant alpha |
| TransparentBlt | 透明色鍵混合 (需 msimg32.dll) | 指定透明色,自動忽略該色像素 |
| GradientFill | 漸層填充 (三角形/矩形) | TRIVERTEX + GRADIENT_TRIANGLE/RECT |
| 函式 | 用途 |
|---|---|
| CreateIcon / CreateIconIndirect / CreateIconFromResource / CreateIconFromResourceEx | 從 AND/XOR 遮罩、ICONINFO、資源建立圖示 |
| CreateCursor | 建立游標 (熱點座標 + AND/XOR 遮罩) |
| LoadIcon / LoadCursor / LoadCursorFromFile / LoadImage | 從資源/檔案載入 (LoadImage 統一介面) |
| DrawIcon / DrawIconEx | 繪製圖示/游標 (Ex 支援縮放、動畫、特定框架) |
| GetIconInfo | 分解圖示取得熱點、遮罩/顏色位圖控制代碼 |
| ExtractIcon / ExtractIconEx / ExtractAssociatedIcon | 從 EXE/DLL/檔案關聯提取圖示 |
| CopyIcon / DestroyIcon / DestroyCursor | 複製/銷毀 (需配對呼叫避免洩漏) |
| 函式 | 用途 |
|---|---|
| GetDIBColorTable / SetDIBColorTable | DIB Section 8bpp 調色板存取 (256 色表) |
| CreateHalftonePalette | 建立半調調色板 (8bpp 裝置最佳化) |
| GetNearestPaletteIndex / GetPaletteEntries / SetPaletteEntries | 調色板索引/項目操作 |
| RealizePalette / UpdateColors | 調色板實現/更新 (256 色模式遺產) |
| 函式 | 用途 |
|---|---|
| CreateSolidBrush / CreateHatchBrush / CreatePatternBrush / CreateDIBPatternBrush / CreateBrushIndirect | 各類刷子建立 (Pattern/DIBPattern 支援位圖圖案) |
| PatBlt | 刷子圖案填充矩形 (ROP 操作) |
| GetObject / GetObjectType | 取得 GDI 物件屬性 (BITMAP, LOGBRUSH, LOGPEN...) |
DeleteObject (位圖/刷子/筆/字型/調色板/區域)、DeleteDC (記憶體 DC)、DestroyIcon/Cursor、ReleaseDC (視窗 DC)。HGDIOBJ hOld = SelectObject(hdc, hNew); ... SelectObject(hdc, hOld);,否則原物件無法刪除、DC 洩漏。CreateDIBSection 回傳的 ppvBits 指標有效期至 DeleteObject,可跨執行緒/進程 (配合 CreateFileMapping) 直接操作像素,極適合高效影像處理。GDI 位圖/圖示/光柵 API 雖屬舊世代技術,仍是 Windows 相容性基石。掌握 CreateDIBSection + BitBlt/StretchBlt/AlphaBlend 核心組合,嚴守資源管理鐵律,即可實作高效影像檢視、截圖、縮圖產生、列印預覽等功能。新專案強烈建議採用 Direct2D + WIC 現代圖形堆疊,享受硬體加速與豐富影像格式支援。