比使用SetPixel()更快的改变像素的方法

6

我一直在尝试使用Windows的SetPixelV来直接在屏幕上显示图像,但是如您所知,这太慢了,而且对于我想要使用它的目的来说也太慢了。请问有人能指点我如何更快地直接在屏幕上(不是在窗口中)显示图像吗?(不必跨平台)


你总是需要在窗口上绘制 - 桌面本身就是一个窗口。 - Mark Ransom
@MarkRansom:这是一个奇怪的看法。有一个窗口句柄代表桌面,但这并不妨碍你直接在屏幕上绘制。你可以获取到屏幕或显示设备的设备上下文,并使用设备上下文函数直接绘制,包括BitBlt() - André Caron
@AndréCaron,我一直以为GetDC(NULL)只是返回桌面的DC。我刚刚用Spy++玩了一下,发现事实要复杂一些,所以我收回了之前说的话。 - Mark Ransom
@MarkRansom:你也可以使用CreateDC()来获取特定显示设备的DC。到目前为止,我从未找到过一份清晰地解释层次结构中所有微妙之处的单一文档(或者至少是哪些元素建立在哪些其他元素之上),但肯定存在“直接”(虚拟)设备/适配器访问。无论如何,显示设备似乎都处于比窗口更低的层次。 - André Caron
1
尽管有很多关于如何访问虚拟屏幕设备的讨论,但我认为这并不是这个问题所涉及的。这个问题的前提是SetPixelV已经实现了在屏幕上“直接显示图像”的目标。这个问题是关于速度而不是目的地的。 - Rob Kennedy
显示剩余2条评论
3个回答

6

3
你可以调用 BitBlt 函数。前提是你已经有了整个图像,它不会设置单个像素(除非你复制了一堆一个像素的图像,但这样做速度可能更慢)。

2

也许 BitBlit 是你正在寻找的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接