В hBitmap — исходный цветной рисунок, с маской RGB(255,0,255)
В hDC — должны получить результирующее изображение.
HDC hMemDc = ::CreateCompatibleDC(hDc);
HDC hSrcDC = ::CreateCompatibleDC(hDc);
int cx = rect.Width();
int cy = rect.Height();
// create mono or color bitmap
HBITMAP hBm = ::CreateBitmap(cx, cy, 1, 1, NULL);
HBITMAP hOldBitmap1 = (HBITMAP)::SelectObject(hMemDc, hBm);
::PatBlt(hMemDc, 0, 0, cx, cy, WHITENESS);
BITMAP b;
GetObject(hBitmap, sizeof(BITMAP),(LPSTR)&b);
HBITMAP hOldBitmap2 = (HBITMAP)::SelectObject(hSrcDC, hBitmap);
::TransparentBlt(hMemDc,
0,
0,
cx,
cy,
hSrcDC,
0,
0,
b.bmWidth,
b.bmHeight,
RGB(255, 0, 255));
::BitBlt(hDc, rect.left, rect.top, cx, cy, hMemDc, 0, 0, SRCCOPY);
::SelectObject(hMemDc, hOldBitmap1);
::ReleaseDC(0, hMemDc);
::SelectObject(hSrcDC, hOldBitmap2);
::ReleaseDC(0, hSrcDC);
...
Получается странный эффект зеркалирования. От чего он взялся и как от него избавиться?
Рисунок:
здесь