MFC の transparentblt 関数の使用方法

MFCではCImageクラスでTransparentBlt関数が提供され、透過ビットマップの描画を行う。TransparentBlt関数のプロトタイプは以下の通り。

BOOL TransparentBlt(
   HDC hdcDest,        // 目标设备上下文句柄
   int xDest,          // 目标矩形左上角的x坐标
   int yDest,          // 目标矩形左上角的y坐标
   int nDestWidth,     // 目标矩形的宽度
   int nDestHeight,    // 目标矩形的高度
   HDC hdcSrc,         // 源设备上下文句柄
   int xSrc,           // 源矩形左上角的x坐标
   int ySrc,           // 源矩形左上角的y坐标
   int nSrcWidth,      // 源矩形的宽度
   int nSrcHeight,     // 源矩形的高度
   UINT crTransparent  // 透明颜色
);

引数について

  1. ターゲット デバイスの描写先の装置コンテキストであり、ターゲット デバイスの描写先の装置コンテキストを表しています。
  2. nDest、yDest:ターゲットとなる矩形の左上の座標で、ターゲットデバイス上の描画対象エリアの位置を表します。
  3. nDestWidth, nDestHeight:目標の長方形の幅と高さを表すため、描画する側の領域のサイズです。
  4. hdcSrcは元デバイスの文脈ハンドルで、描画するソースビットマップのデバイスコンテキストを表します。
  5. nSrc、ySrc:ソース矩形左上の座標であり、描画したいソースビットマップ内領域の位置の開始を表します。
  6. nSrcWidth、nSrcHeight:描画したい領域のサイズを表す、元の矩形の幅と高さ。
  7. 透過色 : ソース画像で透過させたい色を表す

例の使用法:

// 创建目标设备上下文
HDC hdcDest = ::GetDC(m_hWnd);
// 创建源设备上下文
HDC hdcSrc = ::CreateCompatibleDC(hdcDest);

// 加载源位图
CImage imgSrc;
imgSrc.Load(_T("source.bmp"));

// 将源位图选入源设备上下文
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hdcSrc, imgSrc);

// 绘制透明位图
TransparentBlt(hdcDest, 0, 0, nDestWidth, nDestHeight, hdcSrc, xSrc, ySrc, nSrcWidth, nSrcHeight, crTransparent);

// 恢复源设备上下文
::SelectObject(hdcSrc, hBmpOld);

// 释放源设备上下文
::DeleteDC(hdcSrc);

// 释放目标设备上下文
::ReleaseDC(m_hWnd, hdcDest);

透明なビットマップは、crTransparent パラメーターを指定することで実現できます。このパラメーターは、ソースのビットマップで透明にしたい色を表します。実際の使用では、ソースのビットマップの具体的な状況に応じて、透明色の値を決定する必要があります。

bannerAds