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

MFC 位圖繪製:DDB、DIB 與圖標的裝載、繪製與光柵操作

     編輯:關於C語言

Windows 提供設備相關位圖(DDB)與設備無關位圖(DIB)兩種位圖機制。DDB 適合螢幕快速繪製,DIB 適合跨裝置保存與列印。本文示範 `CBitmap::LoadBitmap` 載入資源 DDB、記憶體 DC 配合 `BitBlt`/`StretchBlt` 高效繪製,並完整列舉 15 種光柵操作(ROP)代碼與效果。

DDB 快速繪製流程

void CMyView::OnDraw(CDC* pDC) {
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);           // 建立相容記憶體 DC

    CBitmap bmp;
    bmp.LoadBitmap(IDB_MY_BITMAP);           // 從資源載入 DDB

    CBitmap* pOldBmp = memDC.SelectObject(&bmp); // 選入記憶體 DC

    BITMAP bm;
    bmp.GetBitmap(&bm);                      // 取得寬高

    // 等比例複製
    pDC->BitBlt(10, 10, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);

    // 或縮放繪製
    // pDC->StretchBlt(10, 10, 200, 150, &memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

    memDC.SelectObject(pOldBmp);             // 還原
}

光柵操作代碼 (ROP) 完整表

代碼效果
SRCCOPY直接複製源到目標(最常用)
SRCAND源 AND 目標
SRCPAINT源 OR 目標
SRCINVERT源 XOR 目標
SRCERASE源 AND (NOT 目標)
NOTSRCCOPY複製源的反色
NOTSRCERASE(NOT 源) AND (NOT 目標)
MERGECOPY圖案 AND 源
MERGEPAINT(NOT 源) OR 目標
PATCOPY複製圖案到目標
PATPAINT圖案 OR 目標
PATINVERT圖案 XOR 目標
DSTINVERT反轉目標
BLACKNESS全黑
WHITENESS全白

DIB 與圖標提示

  • DIB:使用 `CreateDIBSection` 建立,擁有像素指標可直接操作,適合影像處理、列印。繪製時用 `SetDIBitsToDevice` 或 `StretchDIBits`。
  • 圖標:`CImageList` 管理多圖標,`Draw` 方法支援透明繪製;或 `LoadImage` 載入 `HICON`,再用 `DrawIconEx` 繪製。
  • 透明色:`BitBlt` 不支援透明,需用 `TransparentBlt`(需 `msimg32.lib`)或 `MaskBlt` 實現。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved