c++ - Blt() 创建图层效果。不工作。我是在使用错误的逻辑函数还是什么?

标签 c++ winapi graphics gdi

我有一个窗口,由各种对象绘制以创建分层效果(想想平视显示器,其中一个对象绘制指南针,另一个绘制网格线,另一个绘制高度计读数等)。因此,每个对象都有一个它绘制到的黑色内存位图。当我调用该对象的 Draw 函数时,内存位图被 blits 到应用程序窗口。内存位图一开始都是黑色的,对象在上面绘制。黑色是透明色,所以它被遮盖了。结果是叠加效果。

因此,我一直在 blt() 函数中使用 OR 作为我的逻辑函数并且它起作用了。但是,我注意到,如果前一层涂成白色,那么在它上面绘制的图层看起来就像在前一层下面。白色(ish)颜色是唯一发生这种效果的颜色。所有其他颜色都正确绘制(也就是说,该图层看起来像是在前一个图层之上绘制的,依此类推)。有人见过这种现象吗?

最佳答案

您为此使用了错误的函数。如果您尝试覆盖的像素恰好是黑色,则使用带有逻辑 OR 的 BitBlt 将起作用,但如果您将两种非零颜色与 OR 组合,则会得到奇怪的结果。尝试改用 TransparentBlt。该函数可让您明确指定哪种颜色应该是透明的。

关于c++ - Blt() 创建图层效果。不工作。我是在使用错误的逻辑函数还是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/966138/

相关文章:

c++ - 初始化 vector 数组

c++ - std:numeric_limits<double>::epsilon 定义

C#支持长路径的I/O库(解决PathTooLongException)

c++ - 安全删除窗口子类化?

java - 更高效的 RGB 到 ARGB 转换

graphics - 如何查看 .PBRT 文件的图像

c++ - 在 C++ 中传递固定大小的数组?

c++ - QImage 的 RGB 值 vector

C++:使用 LB_GETCURSEL 和 LB_GETTEXT 从列表框中获取信息

css - 由文本控制的鼠标悬停横幅