Windows GDI:图案画笔与位图的 BitBlt 之间的区别
Windows GDI: Difference Between a Pattern Brush & BitBlt of a Bitmap
使用位图创建 GDI 图案画笔然后用该画笔填充矩形与直接从设备独立位图 Blitting 之间在功能上有什么区别吗?
为了澄清,我所说的第一种情况是使用位图创建图案画笔,然后使用 PATCOPY 用 patblt 填充整个屏幕。我的意思是使用 bitblit 从源 Bitmap 直接 Blitting 似乎更有效,但我不确定它们在功能上是否相同(Windows 非常新,如果这有点模糊或难以理解,我很抱歉明白)
方法一:制作图案画笔,选入DC,PatBlt配合PATCOPY使用
方法二:Select将DIB段放入内存DC中,使用BitBlt。
这些方法的主要区别是:
如果目标矩形大于源矩形,方法 1 将为您平铺图像。使用方法 2,您必须重复调用 BitBlt。
使用方法2,您必须创建和管理内存DC。
就性能而言,它们在 Windows 的现代版本中可能大致相同。 The mapping of the DIB colors to the destination's color format happens just once when selected into the DC.如果卡上有足够的内存,图像应该只通过图形总线传输一次。这两种方法可能都针对特殊情况优化了路径。
使用PatBlt,您可以重复使用单色图案画笔并设置不同的颜色,只需更改DC中的文本和背景颜色即可。使用 BitBlt,您必须先更新内存 DC 中的位图。
如果我没记错的话,在过去,图案画笔的尺寸被限制在非常小的东西上(比如阴影画笔)。图案画笔通常是单色的(每像素 1 位),用于通过设置文本和背景颜色并使用 PatBlt 快速平铺它们来填充背景。
使用位图创建 GDI 图案画笔然后用该画笔填充矩形与直接从设备独立位图 Blitting 之间在功能上有什么区别吗?
为了澄清,我所说的第一种情况是使用位图创建图案画笔,然后使用 PATCOPY 用 patblt 填充整个屏幕。我的意思是使用 bitblit 从源 Bitmap 直接 Blitting 似乎更有效,但我不确定它们在功能上是否相同(Windows 非常新,如果这有点模糊或难以理解,我很抱歉明白)
方法一:制作图案画笔,选入DC,PatBlt配合PATCOPY使用
方法二:Select将DIB段放入内存DC中,使用BitBlt。
这些方法的主要区别是:
如果目标矩形大于源矩形,方法 1 将为您平铺图像。使用方法 2,您必须重复调用 BitBlt。
使用方法2,您必须创建和管理内存DC。
就性能而言,它们在 Windows 的现代版本中可能大致相同。 The mapping of the DIB colors to the destination's color format happens just once when selected into the DC.如果卡上有足够的内存,图像应该只通过图形总线传输一次。这两种方法可能都针对特殊情况优化了路径。
使用PatBlt,您可以重复使用单色图案画笔并设置不同的颜色,只需更改DC中的文本和背景颜色即可。使用 BitBlt,您必须先更新内存 DC 中的位图。
如果我没记错的话,在过去,图案画笔的尺寸被限制在非常小的东西上(比如阴影画笔)。图案画笔通常是单色的(每像素 1 位),用于通过设置文本和背景颜色并使用 PatBlt 快速平铺它们来填充背景。