В настоящее время я редактирую старый код GDI для использования GDI + и столкнулся с проблемой, когда дело доходит до отрисовки файла BMP с прозрачным фоном. В старом коде GDI не использовался какой-либо очевидный дополнительный код для рисования прозрачного фона, поэтому мне интересно, как этого добиться с помощью GDI +.
Мой текущий код выглядит так
HINSTANCE hinstance = GetModuleHandle(NULL);
bmp = Gdiplus::Bitmap::FromResource(hinstance, MAKEINTRESOURCEW(IDB_BMP));
Gdiplus::Graphics graphics(pDC->m_hDC);
graphics.DrawImage(&bmp, posX, posY);
Я также пытался создать новое растровое изображение из ресурса, используя метод клонирования и отрисовывая растровое изображение во вновь созданное, но ни то, ни другое не помогло. Оба раза я использовал PixelFormat32bppPARGB.
Затем я попытался использовать альфа-смешивание, но таким образом все изображение стало прозрачным, а не только фон:
Gdiplus::ColorMatrix clrMatrix = {
1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f
};
Gdiplus::ImageAttributes imgAttr;
imgAttr.SetColorMatrix(&clrMatrix);
graphics.DrawImage(&bmp, destRect, 0, 0, width(), height(), Gdiplus::UnitPixel, &imgAttr);
Информация о прозрачности уже содержится в изображении, но я не знаю, как применить ее при рисовании изображения. Как этого добиться?