【问题标题】:Faster Way to change pixels than SetPixel()比 SetPixel() 更快的改变像素的方法
【发布时间】:2012-03-13 22:34:06
【问题描述】:

我一直在尝试使用 SetPixelV for windows 来直接在屏幕上显示图像,我相信你知道它慢得让人难以忍受,而且对于我不想用它的东西来说太慢了。谁能指出我如何直接显示在屏幕上(而不是在窗口中)的正确方向,这比 SetPixelV 更快? (不必独立于平台)

【问题讨论】:

  • 你总是必须在一个窗口上绘图——桌面本身就是一个窗口。
  • 阅读 MSDN 上的this article(尤其是最后一段)。
  • @MarkRansom:这是一种奇怪的看待方式。有一个代表桌面的窗口句柄,但这并不妨碍您“直接”绘制到“屏幕”。您可以获取屏幕或显示设备的设备上下文,并使用设备上下文函数直接绘制到该设备上下文,包括BitBlt()
  • @AndréCaron,我一直认为 GetDC(NULL) 只是为桌面返回了一个 DC。刚刚玩了Spy++,发现真相有点复杂,所以收回之前说的话。
  • 尽管所有这些都在谈论如何访问虚拟屏幕设备,但我认为这不是这个问题的意义所在。这个问题的前提是SetPixelV已经实现了“直接在屏幕上显示图像”的预期目标。问题是关于速度,而不是目的地。

标签: c++ c windows desktop pixel


【解决方案1】:

您可以在内存中构建您的图像并使用SetDIBitsToDevice 复制它。

【讨论】:

    【解决方案2】:

    您可以致电BitBlt。这是假设你已经拥有了整个图像——它没有设置单个像素(除非你对一堆单像素图像进行 blit,但是你可能会处于比你开始的位置更糟糕的位置,速度方面)。

    【讨论】:

      【解决方案3】:

      也许BitBlit 就是您要找的。​​p>

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 2020-11-06
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 2014-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多