Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用BitBlt从屏幕写入屏幕_Windows_Winapi_Graphics_Bitmap - Fatal编程技术网

Windows 使用BitBlt从屏幕写入屏幕

Windows 使用BitBlt从屏幕写入屏幕,windows,winapi,graphics,bitmap,Windows,Winapi,Graphics,Bitmap,我试图复制屏幕的某些部分,修改它们,然后将这些部分复制回屏幕。这是在Windows中,使用C++ + < /P> 我的代码的一般结构如下所示: HDC hdcDesktop = GetDC(NULL); HDC hdcTemp = CreateCompatibleDC(hdcDesktop); BitBlt(hdcTemp, 0, 0, 100, 100, hdcDesktop, 100, 100, SRCCOPY); BitBlt(hdcDesktop, rand() % 1920, ran

我试图复制屏幕的某些部分,修改它们,然后将这些部分复制回屏幕。这是在Windows中,使用C++ + < /P> 我的代码的一般结构如下所示:

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);

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

此代码存在一些问题:

  • 如文档所示,创建一个1x1像素的新内存图像。这显然不够大,无法容纳100x100块图像。你可能应该使用

  • 传递给BitBlt的坐标为:

    • 目的地左上角(nXDest,nYDest)
    • 副本的宽度/高度(nWidth,nHeight)
    • soruce的左上角(nXSrc、nYSrc)
    按这个顺序。您似乎混淆了nXSrc/nYSrc和nWidth/nHeight。检查你的号码

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


  • 您忘记了CreateCompatibleBitmap+SelectObject。啊哈。我刚才在看那一页,但是弄糊涂了,所以我把上面的部分看得更清楚了。谢谢谢谢,这对我来说很有用(5年前!)我想最后为这添加一些上下文-我试图制作一个恼人的程序,除了完全搞乱某人的屏幕外,没有任何实际目的。所以,我肯定会称之为肆无忌惮的滥用,对于这个项目来说,效果非常好。