MFCでTransparentBlt関数の使い方を教えてください。

透過的なイメージを透明な効果付きでデバイスコンテキストに描画するにはTransparentBlt関数を使用します。

関数のプロトタイプ:

BOOL TransparentBlt(
  HDC   hdcDest,
  int   xoriginDest,
  int   yoriginDest,
  int   wDest,
  int   hDest,
  HDC   hdcSrc,
  int   xoriginSrc,
  int   yoriginSrc,
  int   wSrc,
  int   hSrc,
  UINT  crTransparent
);

パラメータの説明:

  1. hdcDest:宛先デバイス コンテキストのハンドル。
  2. xoriginDest:目的の長方形領域の左上のX座標
  3. 目標矩形領域の左上のy座標
  4. ターゲット長方形領域の幅。
  5. 目標矩形領域の高さ。
  6. hdcSrc は、ソース デバイス コンテクストのハンドルです。
  7. 原点矩形領域左上のx座標
  8. 原矩形領域の左上隅のy座標。
  9. wSrc:元の長方形領域の幅。
  10. srcの高さ
  11. 透明:透過色値。元の画像と同じ色のピクセルは透明にされます。

使用例:

CImage image;
image.Load(_T("path/to/image.png"));

CDC* pDC = GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, image.GetWidth(), image.GetHeight());
memDC.SelectObject(&bmp);
memDC.BitBlt(0, 0, image.GetWidth(), image.GetHeight(), pDC, 0, 0, SRCCOPY);
image.BitBlt(memDC.GetSafeHdc(), 0, 0, SRCCOPY);
TransparentBlt(pDC->GetSafeHdc(), x, y, width, height, memDC.GetSafeHdc(), 0, 0, image.GetWidth(), image.GetHeight(), RGB(255, 0, 255));

ReleaseDC(pDC);

まずイメージファイルをCImageオブジェクトにロードし、次に互換性のあるメモリデバイスコンテキストとビットマップオブジェクトを作成し、ビットマップオブジェクトをデバイスコンテキストに選択し、BitBlt関数を使用して画面上のイメージをメモリデバイスコンテキストにコピーし、その後BitBlt関数を使用してイメージをメモリデバイスコンテキストに描画し、最後にTransparentBlt関数を使用してメモリデバイスコンテキスト内のイメージを画面上のターゲットデバイスコンテキストに描画し、透過色を指定します。

bannerAds