gpt4 book ai didi

c++ - 如何在 GDI+ 中绘制 PNG 并保持透明度/alpha channel

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:45 27 4
gpt4 key购买 nike

基本上,当直接在纯色表面上绘制时,具有 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);

最佳答案

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

问题在于您的色键只会使纯白色像素变得透明,而其他任何东西都是纯色的。

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

关于c++ - 如何在 GDI+ 中绘制 PNG 并保持透明度/alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845105/

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