首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows API 位圖、圖示與光柵運算核心函式完整參考指南

     編輯:關於C++

概述

GDI (Graphics Device Interface) 位圖、圖示、游標與光柵運算函式構成 Windows 2D 繪圖核心。涵蓋裝置相關位圖 (DDB)、裝置獨立位圖 (DIB)、DIB Section、圖示/游標資源、位元塊轉移 (BitBlt/StretchBlt)、遮罩繪製、幾何轉換等。本文依功能分類整理核心 API,並說明資源管理關鍵點與現代替代方案。

分類彙總表

1. 位圖建立與載入

函式用途關鍵參數/備註
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 副本

2. 位圖像素存取

函式用途
GetBitmapBits / SetBitmapBitsDDB 像素緩衝區複製 (舊式,不建議)
GetDIBits / SetDIBitsDDB ↔ DIB 像素轉換 (指定 BITMAPINFO)
GetDIBitsToDevice / SetDIBitsToDeviceDIB 直接繪製至 DC (無縮放)
GetBitmapDimensionEx / SetBitmapDimensionEx取得/設定位圖實體尺寸 (0.1mm 單位,供列印縮放參考)

3. 光柵運算 (BitBlt 系列)

函式用途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平行四邊形映射 (旋轉/傾斜)三點定義目標平行四邊形,可選遮罩
AlphaBlendAlpha 通道混合 (需 msimg32.dll)BLENDFUNCTION 結構,支援 per-pixel/constant alpha
TransparentBlt透明色鍵混合 (需 msimg32.dll)指定透明色,自動忽略該色像素
GradientFill漸層填充 (三角形/矩形)TRIVERTEX + GRADIENT_TRIANGLE/RECT

4. 圖示與游標

函式用途
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複製/銷毀 (需配對呼叫避免洩漏)

5. 調色板與 DIB Section 進階

函式用途
GetDIBColorTable / SetDIBColorTableDIB Section 8bpp 調色板存取 (256 色表)
CreateHalftonePalette建立半調調色板 (8bpp 裝置最佳化)
GetNearestPaletteIndex / GetPaletteEntries / SetPaletteEntries調色板索引/項目操作
RealizePalette / UpdateColors調色板實現/更新 (256 色模式遺產)

6. 刷子與繪圖屬性 (相關)

函式用途
CreateSolidBrush / CreateHatchBrush / CreatePatternBrush / CreateDIBPatternBrush / CreateBrushIndirect各類刷子建立 (Pattern/DIBPattern 支援位圖圖案)
PatBlt刷子圖案填充矩形 (ROP 操作)
GetObject / GetObjectType取得 GDI 物件屬性 (BITMAP, LOGBRUSH, LOGPEN...)

資源管理鐵律

  1. 建立即負責銷毀:DeleteObject (位圖/刷子/筆/字型/調色板/區域)、DeleteDC (記憶體 DC)、DestroyIcon/Cursor、ReleaseDC (視窗 DC)。
  2. 選入 DC 後必須換回原物件:HGDIOBJ hOld = SelectObject(hdc, hNew); ... SelectObject(hdc, hOld);,否則原物件無法刪除、DC 洩漏。
  3. DIB Section 共享記憶體:CreateDIBSection 回傳的 ppvBits 指標有效期至 DeleteObject,可跨執行緒/進程 (配合 CreateFileMapping) 直接操作像素,極適合高效影像處理。
  4. GDI 物件配額:每進程預設 10,000 個 GDI 物件上限 (可登錄表調整),大量建立位圖/字型必須及時釋放。

現代替代方案

  • Direct2D / DirectWrite:硬體加速、保留模式、浮點座標、子像素字型、完整 Alpha 支援、效能優於 GDI 數十倍。
  • WIC (Windows Imaging Component):解碼/編碼 JPEG/PNG/TIFF/BMP/GIF/ICO/HEIF/WEBP,元資料、色彩管理、像素格式轉換。
  • GDI+ (System.Drawing):Managed 封裝,支援 Alpha、矩陣轉換、進階筆刷,但單執行緒、效能較 Direct2D 低。
  • Skia / Cairo / ImageSharp:跨平台 2D 繪圖庫,適合 .NET Core / Linux / macOS 部署。

結語

GDI 位圖/圖示/光柵 API 雖屬舊世代技術,仍是 Windows 相容性基石。掌握 CreateDIBSection + BitBlt/StretchBlt/AlphaBlend 核心組合,嚴守資源管理鐵律,即可實作高效影像檢視、截圖、縮圖產生、列印預覽等功能。新專案強烈建議採用 Direct2D + WIC 現代圖形堆疊,享受硬體加速與豐富影像格式支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved