如何 *** 透明位图(绘制一张透明背景的单色位图)
生活常识 2023-05-15 21:47生活常识www.xinxueguanw.cn
怎么画一个人的背影?用透明背景绘制单色位图。
在上一篇文章中,我留下了一个难题如何绘制背景透明的单色位图。今天我们将揭开谜底。
说实话,我不是GDI方面的专家,所以可能有比下面描述的两种 更好的解决方案,我不 我不知道。为了演示透明背景的效果,我将窗口的背景颜色设置为工作区颜色。
1采用 MaskBlt API
以上的 需要的代码量最少,但我个人觉得有点大材小用。它使用所谓的四进制光栅操作,就像三进制一样,只是因为我不 我不想创建另一个图案画笔。(光栅操作0x00AA0029实际上是一个空操作(NOP)运算符,不对目标区域做任何操作。我没有。我记不太清了,但我是通过查阅文件了解到的。)宏MAKEOP4的意思是对于蒙版中的所有白色像素,不执行任何操作(NOP),而对于每个黑色像素,执行SRCCOPY操作。请注意,背景色从未使用过。毕竟我们要画的是背景透明的位图。,我们可以直接删除设置和恢复DC背景色的相关代码。
这是传统的两步方案。之一种 是将前景设置为黑色,背景设置为白色,然后使用SRCAND擦除要覆盖的像素。这具有将所有前景像素擦除为零,保持背景完整的效果。第二个blit做同样的事情,使用SRCPAINT。这意味着背景像素需要被视为黑色,以便当它们与目标或在一起时,目标像素保持不变。前景像素获得所需的前景颜色。
此 可以通过否定之一个blit来缩短前景和背景,这样黑色就不必在背景色和文本色之间移动。
很难说这种缩短是否真的是一种整体的提升。一些显示驱动程序可能具有高度优化的SRCAND处理程序,而它们不太可能具有优化的0x00220326处理程序。
练习为什么可以 你能颠倒第二步,把它转换成MERGEPAINT吗?)
2传统的二步式
细节,我的更爱! 雷蒙德陈 s 《The Old New Thing》是我最喜欢的博客之一,里面包含了很多关于Windows的小知识,对于Windows平台的开发者来说真的很有帮助。本文来自《Drawing a monochrome bitmap with transparency》如何把位图变成透明背景可以做成背景透明的位图格式。