2

基本上,当直接在纯色表面上绘制时,具有 alpha 的图像可以正确绘制,但是当它碰到窗口透明的区域时,具有 alpha 值的 PNG 开始具有白色背景。

希望我的代码能帮助你们破译发生了什么。非常感谢所有帮助。

GDI+ 绘图

Image indicator(L"resources\\images\\floating_icon [a] 1.png", FALSE);
g.DrawImage(&indicator, 0, 0);

TextureBrush myTextureBrush(&indicator);
g.FillRectangle(&myTextureBrush, WindowPadding, 50, WindowDim.right - WindowPadding * 2, WindowPadding);

窗口属性

hWnd = CreateWindowEx(0, szWindowClass, szTitle, WS_POPUP | WS_OVERLAPPED,
    0, 0, WindowDim.right, WindowDim.bottom, NULL, NULL, hInstance, NULL);

SetLayeredWindowAttributes(hWnd, RGB(255, 255, 255), 0,
    LWA_COLORKEY);
4

1 回答 1

2

如果您的底层位图是纯白色 (255,255,255),那么当您在其上绘制 alpha 图像时,您最终会得到一种不是纯白色的颜色(除非像素完全透明) - 图像的每个像素都是混合的与背景的基础颜色。

这样做的问题是您的颜色键只会使纯白色像素透明,而其他任何东西都是实心的。

解决方案是切换到对分层窗口使用每像素 alpha。

于 2013-09-17T08:54:11.257 回答