Мне необходимо на часть загруженной из файла картинки наложить определенный цвет.
Что я делаю не так
Вот мой код :
static HDC hDc;
static HDC hCompartibleDC;
static HDC hCompRectDC;
static PAINTSTRUCT ps;
static HANDLE hBitmap;
static HANDLE hOldBitmap;
static HBRUSH hBr;
static HBRUSH hWtBr;
static BITMAP Bmp;
static RECT rTmp;
switch(msg)
{
case WM_INITDIALOG:
hBitmap = LoadImage(NULL, __TEXT("BSub.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
hBr = CreateSolidBrush(RGB(255, 232, 186));
hWtBr = CreateSolidBrush(RGB(255, 255, 255));
GetObject(hBitmap, sizeof(Bmp), &Bmp);
rTmp.top = 0;
rTmp.left = 0;
rTmp.bottom = Bmp.bmHeight;
rTmp.right = Bmp.bmWidth;
break;
case WM_PAINT:
hDc = BeginPaint(hDlg, &ps);
hCompartibleDC = CreateCompatibleDC(hDc);
hCompRectDC = CreateCompatibleDC(hDc);
hOldBitmap = SelectObject(hCompartibleDC, hBitmap);
SelectObject(hCompRectDC, hBr);
Rectangle(hCompRectDC, 10, 10, 100, 100);
StretchBlt(hCompartibleDC, 0, 10, 50, 50, hCompRectDC, 0, 0, 50, 50, SRCAND);
StretchBlt(hDc, rct.left, rct.top, rct.right - rct.left, rct.bottom - rct.top, hCompartibleDC, 0, 0, Bmp.bmWidth, Bmp.bmHeight, SRCCOPY);
SelectObject(hCompartibleDC, hOldBitmap);
DeleteObject(hOldBitmap);
DeleteObject(hCompRectDC);
DeleteObject(hCompartibleDC);
EndPaint(hDlg, &ps);
break;
case WM_CLOSE:
DeleteObject(hWtBr);
DeleteObject(hBr);
DeleteObject(hBitmap);
EndDialog(hDlg, IDOK);
return TRUE;
break;
Результат работы программы — просто загруженная картинка.
Как вариант, работает такое,
hDc = BeginPaint(hDlg, &ps);
hCompartibleDC = CreateCompatibleDC(hDc);
hOldBitmap = SelectObject(hCompartibleDC, hBitmap);
StretchBlt(hDc, rct.left, rct.top, rct.right - rct.left, rct.bottom - rct.top, hCompartibleDC, 0, 0, Bmp.bmWidth, Bmp.bmHeight, SRCCOPY);
SelectObject(hCompartibleDC, hBr);
SelectObject(hCompartibleDC, hBr);
Rectangle(hCompartibleDC, 10, 10, 100, 100);
StretchBlt(hDc, rct.left, rct.top, rct.right - rct.left, rct.bottom - rct.top, hCompartibleDC, 0, 0, Bmp.bmWidth, Bmp.bmHeight, SRCAND);
SelectObject(hCompartibleDC, hOldBitmap);
DeleteObject(hOldBitmap);
DeleteObject(hCompartibleDC);
EndPaint(hDlg, &ps);
Но это немножко изврат