使用BitMap创建GDI Pattern Brush,然后使用该画笔填充rect,以及直接从设备独立位图进行Blitting,是否有任何功能差异?
为了澄清第一个场景我的意思是使用位图创建一个模式画笔,然后使用PATCOPY用patblt填充整个屏幕。我的意思是使用bitblit来源Bitmap的Blit直接使用bitblit似乎效率更高,但是我不确定它们在功能上是否相同(对于Windows来说很新,如果这有点模糊或难以理解,那就很抱歉)
答案 0 :(得分:1)
方法1:创建图案画笔,将其选入DC,并使用PatBlt和PATCOPY
方法2:在存储器DC中选择DIB部分并使用BitBlt。
这些方法之间的主要区别是:
如果目标矩形大于源,方法1将为您平铺图像。使用方法2,您必须重复调用BitBlt。
使用方法2,您必须创建和管理内存DC。
在性能方面,它们在现代版本的Windows中可能大致相同。当选择到DC中时,DIB颜色到目的地颜色格式的映射仅发生一次。如果卡上有足够的内存,图像应该只通过图形总线传输一次。两种方法都可能针对特殊情况优化了路径。
使用PatBlt,只需更改DC中的文本和背景颜色,即可重复使用单色图案画笔并设置不同的颜色。使用BitBlt,您必须首先更新内存DC中的位图。
如果我没记错的话,在过去,花样画笔的尺寸限制在非常小的东西(如画笔画笔)。图案画笔通常是单色的(每像素1位),用于通过设置文本和背景颜色来填充背景,并使用PatBlt快速平铺它们。