逐像素 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目录。
许可证
- 您必须在您的应用程序文档/帮助框中提及我的姓名。
- 如果您在文章论坛上给我留言,让我知道您正在使用此代码,我将不胜感激。
- 对于直接或间接使用此代码造成的任何数据丢失,我概不负责 - 使用风险自负。
- 您不能出售此代码 - 这是免费软件。
如果您有任何建设性意见,请在下方留言!
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。
