65.9K
CodeProject 正在变化。 阅读更多。
Home

逐像素 Alpha 混合

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (23投票s)

2001年3月31日

2分钟阅读

viewsIcon

489359

downloadIcon

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中的源代码。

安装和构建

  1. 确保您拥有 Windows® NT 5.0 的 SDK。
  2. 下载并解压缩本文的源代码
  3. 构建并享受!

如果您想构建ImgDecoder.Dll,您还必须

  1. 下载paintlib和所有必需的库
  2. 下载ImgDecoder项目
  3. ImgDecoder项目解压缩到paintlib
  4. 构建ImgDecoder项目
  5. 将生成的ImgDecoder.dllImgDecoder.lib复制到本文演示应用程序的bin目录。

许可证

  1. 您必须在您的应用程序文档/帮助框中提及我的姓名。
  2. 如果您在文章论坛上给我留言,让我知道您正在使用此代码,我将不胜感激。
  3. 对于直接或间接使用此代码造成的任何数据丢失,我概不负责 - 使用风险自负。
  4. 您不能出售此代码 - 这是免费软件。

如果您有任何建设性意见,请在下方留言!

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.