【问题标题】:Writing to the screen from the screen using BitBlt使用 BitBlt 从屏幕写入屏幕
【发布时间】:2012-04-20 13:57:51
【问题描述】:

我正在尝试复制屏幕的某些部分,对其进行修改,然后将这些部分复制回屏幕。这是在 windows 中,使用 C++。

我的代码的一般结构如下所示:

HDC hdcDesktop = GetDC(NULL);
HDC hdcTemp = CreateCompatibleDC(hdcDesktop);

BitBlt(hdcTemp, 0, 0, 100, 100, hdcDesktop, 100, 100, SRCCOPY);
BitBlt(hdcDesktop, rand() % 1920, rand() % 1080, 100, 100, hdcTemp, 0, 0, SRCCOPY);

应该将屏幕的 100x100 部分从 (100, 100) 开始复制到屏幕的某个随机部分。然而,这不起作用。我做错了什么?

【问题讨论】:

标签: windows winapi graphics bitmap


【解决方案1】:

这段代码有几个问题:

  1. 如文档所示,CreateCompatibleDC 创建一个新的 1x1 像素的内存图像。对于您的 100x100 图像块来说,这显然不够大。您可能应该使用CreateCompatibleBitmap

  2. 传递给BitBlt的坐标是:

    • 目的地的左上角(nXDest,nYDest)
    • 副本的宽度/高度 (nWidth,nHeight)
    • 源的左上角 (nXSrc,nYSrc)

    按这个顺序。您似乎将 nXSrc/nYSrc 与 nWidth/nHeight 混淆了。检查你的号码。

  3. 像这样肆意滥用桌面表面实际上可能 (1) 被禁止并且 (2) 产生意想不到的结果。小心你试图达到的目标。

【讨论】:

  • 谢谢,这对我有用(5 年前!)我觉得终于要为此添加一些上下文了 - 我试图制作一个没有实际目的的烦人程序,除了完全弄乱某人的屏幕。所以,我肯定会称之为肆意滥用,而对于这个项目来说,它的效果非常好。
猜你喜欢
  • 2016-02-13
  • 2013-01-15
  • 2015-08-07
  • 2011-10-26
  • 1970-01-01
  • 2018-05-27
  • 2022-01-06
相关资源
最近更新 更多