【发布时间】:2018-11-24 12:40:39
【问题描述】:
使用位图创建 GDI 图案画笔然后用该画笔填充矩形与直接从设备无关位图进行 Blitting 之间有什么功能区别吗?
为了澄清,我所说的第一个场景是使用位图创建图案画笔,然后使用 PATCOPY 用 patblt 填充整个屏幕。我的意思是,使用 bitblit 从源位图直接进行 Blitting 似乎效率更高,但我不确定它们在功能上是否相同(对于 Windows 来说非常新,如果这有点模糊或难以理解,请见谅)
【问题讨论】:
使用位图创建 GDI 图案画笔然后用该画笔填充矩形与直接从设备无关位图进行 Blitting 之间有什么功能区别吗?
为了澄清,我所说的第一个场景是使用位图创建图案画笔,然后使用 PATCOPY 用 patblt 填充整个屏幕。我的意思是,使用 bitblit 从源位图直接进行 Blitting 似乎效率更高,但我不确定它们在功能上是否相同(对于 Windows 来说非常新,如果这有点模糊或难以理解,请见谅)
【问题讨论】:
方法一:创建图案画笔,选择到DC中,使用PatBlt和PATCOPY
方法二:在内存DC中选择一个DIB段,使用BitBlt。
这些方法的主要区别是:
如果目标矩形大于源矩形,方法 1 将为您平铺图像。使用方法 2,您必须重复调用 BitBlt。
使用方法 2,您必须创建和管理内存 DC。
在性能方面,它们在现代版本的 Windows 中可能大致相同。 DIB 颜色到目标颜色格式的映射仅在选择到 DC 时发生一次。如果卡上有足够的内存,图像应该只通过图形总线传输一次。这两种方法可能都有针对特殊情况的优化路径。
使用 PatBlt,您可以重复使用单色图案画笔并设置不同的颜色,只需更改 DC 中的文本和背景颜色即可。使用 BitBlt,您必须先更新内存 DC 中的位图。
如果我没记错的话,在过去,图案画笔的大小仅限于非常小的东西(如影线画笔)。图案画笔通常是单色的(每像素 1 位),用于通过设置文本和背景颜色并使用 PatBlt 快速平铺来填充背景。
【讨论】: