逐像素 Alpha 混合






4.73/5 (23投票s)
2001年3月31日
2分钟阅读

489359

15358
演示如何创建逐像素 Alpha 混合窗口
引言
在这篇文章中,我将提供一些创建逐像素 alpha 混合窗口的源代码。
首先,一些图像
不错,不是吗?
为了创建一个逐像素窗口,我们将使用
- 一个带有 alpha 通道的 24 位位图
- GDI 函数,
UpdateLayeredWindow
带有 Alpha 通道的 24 位位图
创建位图最棘手的一点是找到一种具有嵌入式 alpha 通道的简单文件格式。
这篇文章最初版本中选择的格式是 PSP(来自Jasc®的 Paint Shop Pro™),但现在推荐的格式已更改为 PNG(便携式网络图形)。
为了加载 PNG 文件,我使用了paintlib 库。这个库还可以加载 PCX、TGA 和 TIFF 格式的文件。
这个演示应用程序没有直接使用paintlib
;而是使用paintlib
包装 DLL,即ImgDecoder.Dll。
为了加载 PSP 文件,我创建了一个名为LoadPSPFileToDIB
(PSPLoader.h/cpp)的函数。
UpdateLayeredWindow
要使用此函数,我们必须有一个顶级窗口(在这个示例中,由CDummyDialog
类实现),并设置扩展样式WS_EX_LAYERED
。
在我们能够将位图传递给UpdateLayeredWindow
函数之前,我们必须使用 alpha 通道预乘 rgb 通道。为此,您只需调用PreMultiplyRGBChannels
函数(查看CPerpixelalphaDlg::DoLoadFile
)。
从这里开始,请阅读CPerpixelalphaDlg::DoUpdateDummyDialog
中的源代码。
安装和构建
- 确保您拥有 Windows® NT 5.0 的 SDK。
- 下载并解压缩本文的源代码。
- 构建并享受!
如果您想构建ImgDecoder.Dll,您还必须
- 下载paintlib和所有必需的库
- 下载ImgDecoder项目
- 将
ImgDecoder
项目解压缩到paintlib
库 - 构建
ImgDecoder
项目 - 将生成的ImgDecoder.dll和ImgDecoder.lib复制到本文演示应用程序的bin目录。
许可证
- 您必须在您的应用程序文档/帮助框中提及我的姓名。
- 如果您在文章论坛上给我留言,让我知道您正在使用此代码,我将不胜感激。
- 对于直接或间接使用此代码造成的任何数据丢失,我概不负责 - 使用风险自负。
- 您不能出售此代码 - 这是免费软件。
如果您有任何建设性意见,请在下方留言!
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。