我目前正在编辑一些旧的 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);
我还尝试通过使用克隆方法并将位图绘制到新创建的位图从资源中创建一个新位图,但都没有帮助。两次我都使用了 PixelFormat32bppPARRGB。
然后我尝试使用 alpha 混合,但这样整个图像变得透明,而不仅仅是背景:
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);
透明度信息已包含在图像中,但我不知道如何在绘制图像时应用它。如何实现这一目标?