gpt4 book ai didi

c++ - GDI+绘制透明BMP的方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:03 25 4
gpt4 key购买 nike

我目前正在编辑一些旧的 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。

然后我尝试使用 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);

透明度信息已经包含在图像中,但我不知道如何在绘制图像时应用它。如何实现这一目标?

最佳答案

迟到的答案但是:

ImageAttributes imAtt;    
imAtt.SetColorKey(Color(255,255,255), Color(255,255,255), ColorAdjustTypeBitmap);

将使 白色 (255,255,255) 在您使用此图像属性的任何位图上透明。

关于c++ - GDI+绘制透明BMP的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11684455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com