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
);
パラメータの説明:
- hdcDest:宛先デバイス コンテキストのハンドル。
- xoriginDest:目的の長方形領域の左上のX座標
- 目標矩形領域の左上のy座標
- ターゲット長方形領域の幅。
- 目標矩形領域の高さ。
- hdcSrc は、ソース デバイス コンテクストのハンドルです。
- 原点矩形領域左上のx座標
- 原矩形領域の左上隅のy座標。
- wSrc:元の長方形領域の幅。
- srcの高さ
- 透明:透過色値。元の画像と同じ色のピクセルは透明にされます。
使用例:
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関数を使用してメモリデバイスコンテキスト内のイメージを画面上のターゲットデバイスコンテキストに描画し、透過色を指定します。