【发布时间】:2018-04-02 23:13:53
【问题描述】:
我正在创建一个用户界面并实际上以这种方式绘制位图:
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP oldBmp = (HBITMAP)SelectObject(hdcMem, mouseover? bitmapover:bitmap);
StretchBlt(hdc, xabs, yabs, width, height, hdcMem, 0, 0, worg, horg, SRCCOPY);
SelectObject(hdcMem, oldBmp);
DeleteDC(hdcMem);
但我只能绘制平面图像,并且需要绘制透明图像(几个 alpha 级别)。我用GetDIBits 和SetDIBits 尝试了一些东西,但我没有画出任何东西。我可以使用 png 或逐像素修改位图,这更简单,我只是想避免使用带有 dll 或限制性许可证的库。
【问题讨论】:
-
使用 OpenGL,没有许可证或真正的库
-
使用无背景的 PNG 文件。在 Photoshop 中创建它
-
@Mikhail:我不相信您可以将 OpenGL 渲染上下文 alpha 混合到本机窗口上。即使 OpenGL 用于像渲染具有 alpha 透明度的图像这样简单的事情也是极其复杂和昂贵的。
-
这是 30 年前有效的代码。 GDI 非常卡在 30 年前硬件的敏感性中,它仅限于 24bpp 像素格式,这使得透明度效果很痛苦。从那以后情况确实有所改善,Windows 内置了对 PNG 解码和带有 alpha 通道的 32bpp 格式的支持。 Start here.