gpt4 book ai didi

c++ - BitBlt 仅捕获部分屏幕

转载 作者:可可西里 更新时间:2023-11-01 11:26:36 24 4
gpt4 key购买 nike

我正在尝试在 Windows 10 下使用 GDI 捕获屏幕的正方形部分。这就是我尝试的方式:

//Get screen DC
desktop = GetDC(NULL);

//Create a compatible bitmap of 32 x 32 px.
HDC hCaptureDC = CreateCompatibleDC(desktop);
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);
SelectObject(hCaptureDC, captureBmp);

//loop:
BitBlt(hCaptureDC, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
BitBlt(desktop, 0, 0, 32, 32, hCaptureDC, 0, 0, SRCCOPY);

所以我在 (sourceX, sourceY) 处捕获一个 32x32 像素的矩形到位图中并将其绘制到屏幕上(左上角)。

但是,这会产生大部分黑色方 block 。只有 GDI 之前绘制的东西才会被捕获。我很确定第一个 BitBlt 就是问题所在。如果我将 WHITENESS 指定为最后一个参数,我会得到一个白色方 block ,这正是我所期望的。所以从屏幕到位图的捕获似乎是有问题的。

如果我直接从一个屏幕复制到另一个屏幕使用

BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);

,一切正常。

我还尝试了标志 CAPTUREBLT

如何将整个区域捕获到位图中?

最佳答案

这一行

HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);

应该是

HBITMAP captureBmp = CreateCompatibleBitmap(desktop, 32, 32);

原因在documentation page上有解释对于 CreateCompatibleBitmap :

When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap. To create a color bitmap, use the HDC that was used to create the memory device context

关于c++ - BitBlt 仅捕获部分屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com