![]() |
1
11
设备上下文只是绘图发生的地方,因此如果有两个不同的DC,则在两个不同的地方绘图。有点像文件句柄。 设备上下文可以指屏幕上的不动产,也可以指内存中的位图,可能还有其他地方,这正是我目前能想到的两个地方。 兼容上下文是具有相同的底层像素组织的上下文,即每像素的位数、每像素的字节数、颜色组织等等。内存位图设备上下文可以有任何您想要的组织,但是您的屏幕上下文将(最终)与图形卡上的缓冲区相关,缓冲区将(取决于模式等)具有非常特定的像素组织。 具有兼容的上下文意味着能够高效地在它们之间传输图像数据,因为只需要很少或根本不需要翻译数据。在另一个极端,如果你有一个256色的调色板,8位的地图,你试图把它blit到一个屏幕上,每个像素有8位rgba,每最后一个像素将需要大量的按摩,因为它是复制的,所以复制不兼容的位图是非常慢的。根据win32 sdk文档,至少bitblt()和stretchblt()“将源颜色格式转换为与目标格式匹配的格式”,因此可以这样做。 研究createCompatibleDC()和createCompatibleBitMap()作为如何创建与现有图形上下文兼容的图形上下文的起点。 selectobject()控制设备上下文中当前活动的资源。上下文具有当前笔、画笔、字体和位图。通过允许您指定更少的参数,这使得许多其他gdi调用更加简单。例如,在使用textout()时不必指定字体,但如果要更改字体,selectobject()就是在这里输入的。如果给selectobject()一个字体句柄,则返回值是有效字体的句柄,后续操作使用新字体。其他种类的资源、笔、画笔等的行为都是一样的。 |