SetBitmapBits 未在窗口上设置捕获的 HBITMAP

发布于 2024-10-31 02:42:57 字数 775 浏览 4 评论 0原文

我想从 0x0(左上角)获取屏幕的 500x500 HBITMAP 并将其绘制在我的窗口上。 这是我的代码。 SaveBitmap() 保存 HBITMAP 及其工作状态。

int scrnw = 500;
int scrnh = 500;

HDC shdc=GetWindowDC(NULL);
HWND win=WindowFromDC(shdc);

HDC cdc=CreateCompatibleDC(shdc);
HBITMAP temp=CreateCompatibleBitmap(shdc,scrnw,scrnh);
PAINTSTRUCT ps;

shdc=BeginPaint(win,&ps);
HBITMAP oldb=(HBITMAP)SelectObject(cdc,temp);
BitBlt(cdc,0,0,scrnw,scrnh,shdc,0,0,SRCCOPY);
SelectObject(cdc,oldb);
EndPaint(win,&ps);
char * buffer;
buffer=new char[scrnw*scrnh*4];
GetBitmapBits(temp,scrnw*scrnh*4,buffer);

SaveBitmap("C:\\scan.bmp", temp);

HDC hdc=GetWindowDC(hwnd);
HBITMAP scrn = CreateCompatibleBitmap(hdc,500,500);
SetBitmapBits(scrn,500*500*4,buffer);

问题是捕获的图像没有绘制在窗口上。我错过了哪里?

I want to get a 500x500 HBITMAP of my screen from 0x0 (top-left) and draw it on my window.
Here goes my code. SaveBitmap() Saves the HBITMAP and its working Fine.

int scrnw = 500;
int scrnh = 500;

HDC shdc=GetWindowDC(NULL);
HWND win=WindowFromDC(shdc);

HDC cdc=CreateCompatibleDC(shdc);
HBITMAP temp=CreateCompatibleBitmap(shdc,scrnw,scrnh);
PAINTSTRUCT ps;

shdc=BeginPaint(win,&ps);
HBITMAP oldb=(HBITMAP)SelectObject(cdc,temp);
BitBlt(cdc,0,0,scrnw,scrnh,shdc,0,0,SRCCOPY);
SelectObject(cdc,oldb);
EndPaint(win,&ps);
char * buffer;
buffer=new char[scrnw*scrnh*4];
GetBitmapBits(temp,scrnw*scrnh*4,buffer);

SaveBitmap("C:\\scan.bmp", temp);

HDC hdc=GetWindowDC(hwnd);
HBITMAP scrn = CreateCompatibleBitmap(hdc,500,500);
SetBitmapBits(scrn,500*500*4,buffer);

The Problem is the Captured Image is not being drawn on the Window.Where am I missing ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

久随 2024-11-07 02:42:57

当您执行 shdc=BeginPaint() 时,shdc 会“忘记”屏幕,因此无处可获取图像。

让它保留 shdc=GetWindowDC(NULL) 并使用另一个 HDC 进行 hdcMyPaint=BeginPaint()。 blit 到 cdc 后,也 blit 到您的 hdcMyPaint。应该可以做到这一点。

shdc is "forgetting" the screen when you perform shdc=BeginPaint(), so there's nowhere to get the image from.

Let it stay with shdc=GetWindowDC(NULL) and use another HDC for hdcMyPaint=BeginPaint(). After blitting to cdc, blit also to your hdcMyPaint. That should do it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文