使用BitBlt从屏幕写入屏幕

时间:2012-04-07 05:45:01

标签: windows winapi graphics bitmap

我正在尝试复制部分屏幕,修改它们,然后将这些部分复制回屏幕。这是在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)开始复制到屏幕的某个随机部分。但是,这不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

此代码存在一些问题:

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

  2. 传递给BitBlt的坐标是:

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

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

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