在上一篇文章中,我留下了一个谜题:如何使用透明背景绘制一张单色位图。今天我们来揭晓谜底。

丑话说前头,我不是一名 GDI 方面的专家,所以,除了下面讲述的两种方法之外,可能还有我所不知道的更好的解决方案。为了演示透明背景的效果,我先将窗口的背景色设置成工作区颜色。

方法1:采用 MaskBlt API

上面的方法所需要编写的代码量最少,但我个人觉得有些矫枉过正了。它使用一个所谓的四元光栅操作,就好像是三元一样,只是因为我不想额外再创建一个图案画刷。(光栅操作 0x00AA0029 实际上是一个空操作(NOP)运算符,它不对目标区域做任何操作,我并没有特别记住它,而是通过查阅文档知道的)
MAKEOP4 这个宏的意思是:对于蒙版中所有的白色像素,不执行任何操作(NOP),而对于每一个黑色像素,执行 SRCCOPY 操作。

请注意,背景色一直都没有被使用,毕竟我们是准备绘制一个透明背景的位图。因此,我们可以直接删除掉设置和恢复 DC 背景色的相关代码。

方法2:传统的二步式

这是传统的两步走方案。第一种方法通过将前景设置为黑色,将背景设置为白色,然后使用 SRCAND 来擦除即将被覆盖的像素。这具有将所有前景像素擦除为零的效果,同时保持背景完好无损。第二个blit做同样的事情,但使用SRCPAINT。这意味着背景像素需要被视为黑色,以便当它们与目标“或”时,目标像素保持不变。前景色像素获得所需的前景色。

此方法可以通过否定第一个 blit 来缩短,反转前景和背景感,这样黑色就不必在背景颜色和文本颜色之间移动。

这种缩短是否真的是一种整体改进很难说。某些显示驱动程序可能具有高度优化的 SRCAND 处理程序,而它们不太可能具有优化的0x00220326处理程序。

(练习:为什么你不能反转第二个步骤,将其转换为MERGEPAINT?)

总结

细枝末节,我的最爱!

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Drawing a monochrome bitmap with transparency》

绘制一张透明背景的单色位图相关推荐

  1. 绘制一条透明背景的trace,并保存;

    绘制一条透明背景的trace,并保存(使用Matlab): %% 绘制一条透明背景的trace: plot(dff(14,:)); % 设置figure的位置 set(gcf,'Position',[ ...

  2. Python生成透明背景图片

    转载请注明出处:http://blog.csdn.net/jinixin/article/details/79115782 关于画图,Python不乏许多优秀的第三方库能支持操作图片,比如Matplo ...

  3. 【CSS】PhotoShop 切图 ② ( PhotoShop 切片选择工具 | 清除切片 | 新建基于图层的切片 | 透明背景图片切图 | 根据参考线选择切片 )

    文章目录 一. PhotoShop 切片选择工具 二.清除切片 三.新建基于图层的切片 四.透明背景图片切图 五.根据参考线选择切片 一. PhotoShop 切片选择工具 如果之前使用 切片工具 设 ...

  4. 不会在线制作透明背景Logo?教你一招轻松去除logo背景

    一个好的logo可以帮助企业在市场上建立品牌,并吸引潜在客户的注意力,但是我们在选择一个精美logo的同时,也需要准备一张透明背景的Logo作为备用,因为透明背景可以让logo更好地融入到不同的场景图 ...

  5. vc实现透明位图,透明背景

    vc实现透明位图,透明背景 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并 ...

  6. Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)

    Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background) 目录

  7. Linux加载png背景图片,pillow使用之:粘贴一张带透明背景的png图片

    说在最前 在使用pillow制作海报的过程中,最经常用的场景: 文字居中(地址) 粘贴一张带透明背景的png图片(地址) 画一个圆形的用户头像(地址) 准备 环境 linux/windows pyth ...

  8. 基于Python的特定形状透明背景词云图绘制

    基于Python的特定形状透明背景词云图绘制 1.需求分析 2.前期准备 2.1文本文件准备 2.2特定形状图片准备 3.代码解析与实现 3.1模块库的导入 3.2停用词表 3.3基于TF-IDF提取 ...

  9. MCGS如何加装透明背景位图

    由于MCGS不支持PNG格式的图片,但是只有PNG格式的图片才能是透明背景.MCGS只支持JPG和BMP格式的,但是它们默认是白色和黑色的背景.所以需要对格式本身来优化.用绘图软件将储存的格式更改为& ...

最新文章

  1. INI文件快速解析java工具包
  2. 圆柱形成的动态演示图!超直观
  3. python3有多少个关键字排序_python3 数据结构和算法-- 通过某个关键字排序一个字典列表...
  4. C++ Regsvr32订购具体解释
  5. EdrawMax Crack,多合一的图表应用程序
  6. 查找入职员工时间排名倒数第三的员工所有信息
  7. 浅谈对社会工程学的认识
  8. 如何下载Eclipse?
  9. B站高管解读财报:要更快实现盈亏平衡 陈睿亲自盯减亏工作
  10. sql数据库包含关系查询
  11. 字长是指计算机什么之间,字长是指计算机()之间一次能够传递的数据位,位宽是CPU通过外据总线与()之 - 问答库...
  12. 897-了解微服务网关
  13. 【GNN报告】腾讯AI lab 徐挺洋:图生成模型及其在分子生成中的应用
  14. 计算机历史ppt 英文儿童,第一课-计算机发展历史ppt
  15. Python 实现按键精灵的功能,超简单详细(Windows版)
  16. Python找出所有的水仙花数
  17. 新浪nbsp;UTnbsp;将于nbsp;6月30日起停止服务
  18. 网易云音乐分析之推荐算法
  19. (转)ASP.NET MVC 学习第一天
  20. JDBC连接oracle11g——socket read timed out

热门文章

  1. 快手-开眼快创 Flutter 实践
  2. python 用cx_Freeze打包程序详细解读setup.py
  3. 游戏:杀戮尖塔(Slay the spire)mod--拉格朗·月
  4. python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
  5. 浙大吴飞“舌战”阿里贾扬清:AI内卷与年薪百万,哪个才是真实?
  6. NS3 Tutorial 中文版:第三章 快速上手
  7. leecode第一百七十四题(地下城游戏)
  8. 徐小贱c语言试卷,纹了这条锦鲤,我遇见了现在的老公 | 纹身大赏No.12
  9. 网页制作 - 问卷网的首页
  10. 五分钟搞懂什么是红黑树(全程图解)