首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BitBlt只捕获部分屏幕

BitBlt只捕获部分屏幕
EN

Stack Overflow用户
提问于 2015-11-12 10:31:01
回答 1查看 1.2K关注 0票数 1

我试图在Windows 10下使用GDI捕捉屏幕的正方形部分。

代码语言:javascript
复制
//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)上捕获了一个32x32px矩形,并将其绘制到屏幕上(左上角)。

然而,这导致了大部分黑色方块。只有GDI在被捕获之前画出的东西。我确信第一个BitBlt就是问题所在。如果我指定WHITENESS作为最后一个参数,我就会得到一个白色的正方形,这正是我所期望的。所以从屏幕到位图的捕获似乎是有问题的。

如果我直接从屏幕复制到屏幕,则使用

代码语言:javascript
复制
BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);

一切都如预期的那样运作。

我也尝试了旗子CAPTUREBLT

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-12 10:55:27

这条线

代码语言:javascript
复制
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);

应该是

代码语言:javascript
复制
HBITMAP captureBmp = CreateCompatibleBitmap(desktop, 32, 32);

文件页 for CreateCompatibleBitmap中解释了原因:

当内存设备上下文被创建时,它最初有一个1×1的单色位图。如果在CreateCompatibleBitmap中使用此内存设备上下文,则创建的位图是单色位图。若要创建颜色位图,请使用用于创建内存设备上下文的HDC。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33669344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档