【发布时间】:2016-02-02 00:47:46
【问题描述】:
我正在开发一个程序,该程序将包含许多 DIB 位图(由 CreateDIBSection 创建),并且必须使用 Win API 在其上绘制大量文本。
为了在位图上绘图,Windows 需要由CreateCompatibleDC 创建的设备上下文。
现在有两种方法:
我可以为每个位图创建一次 DC,将其用于绘制并在释放位图时将其删除。
或者我可以只在需要绘制位图时创建DC,调用绘制函数并删除DC。
什么是更好的方法?我更喜欢第一个,因为调用次数更少 - 这将使我的代码更小,也更快。
但是为每个位图保存一个长寿命的 DC 是不是太贵了?
Edit1:该应用程序实际上是一个 GUI 工具包库,将来可以以不同且不可预知的方式使用,因此我需要一个平衡的决策,以尽可能提高性能和最少的系统资源使用。
【问题讨论】:
-
通常的做法是调用“
GetDC()”(或GetDCEx()),绘制,然后调用“ReleaseDC()”。 -
我不需要在窗口上绘图,所以 GetDC 不是一个选项。 CreateCompatibleDC 是需要使用的。这是与窗口无关的内存 DC。
-
@selbie 嗯,也许你的意思是#2?而且我仍然不想知道问题的答案。
-
糟糕——我就是这个意思!是的 #2!
-
@selbie - 所以,您的意见是内存设备上下文足够昂贵(内存、操作系统资源)以尝试以一堆 API 调用为代价来最小化内存中的实例:@987654325 @, 2xNx
SelectObject和DeleteDC在每次绘制操作(即使是更改的像素)上?