我需要一种方法在具有渐变色背景的情况下展示带有透明背景的PNG图片.
我尝试过以下方法:
CImage img;
CBitmap bmp;
img.Load(_T(".\\res\\foo.png"));
bmp.Attach(img.Detach());
CDC dcStatus;
dcStatus.CreateCompatibleDC(&dc);
dcStatus.SelectObject(&bmp);
dcStatus.SetBkColor(TRANSPARENT);
dc.BitBlt(rectText.left + 250, rectText.top, 14, 14, &dcStatus, 0, 0, SRCCOPY);
bmp.DeleteObject();
但是,无论原始图像中透明的地方在哪里,foo.png都会获得黑色背景。
我尝试创建一个用透明颜色绘制的新位图,并对其进行所有可能的操作,但这并没有帮助。以下是其中一种排列的示例:
CImage img;
CBitmap bmp;
img.Load(_T(".\\res\\foo.png"));
bmp.Attach(img.Detach());
CBitmap bmpMaska;
bmpMaska.CreateBitmap(14, 14, 1, 1, NULL);
CDC dcStatus;
dcStatus.CreateCompatibleDC(&dc);
dcStatus.SelectObject(&bmp);
CDC dcMaska;
dcMaska.CreateCompatibleDC(&dc);
dcMaska.SelectObject(&bmpMaska);
dcMaska.SetBkColor(dcStatus.GetPixel(0, 0));
//TODO: Bitmap ni transparent
dc.BitBlt(rectText.left + 250, rectText.top, 14, 14, &dcMaska, 0, 0, SRCCOPY);
dc.BitBlt(rectText.left + 250, rectText.top, 14, 14, &dcStatus, 0, 0, SRCAND);
bmp.DeleteObject();
bmpMaska.DeleteObject();
这并没有起作用。屏幕上要么是一个全黑的正方形,要么结果与原始结果相同。
我还检查过AlphaBlend API,但我的代码必须是纯MFC + C++,不能使用任何其他API。[编辑]: 公司政策要尽可能少使用API。该代码应在嵌入式Windows系统中实时运行。
[编辑2]: 我不限于PNG图像格式,也就是说,任何能够显示为透明的内容都可以。
请告诉我我做错了什么?