【问题标题】:Displaying HBITMAP显示 HBITMAP
【发布时间】:2012-01-02 02:23:00
【问题描述】:

我先道歉;我是 c 新手,我真的不知道自己在做什么。

我正在尝试使用 Windows 7 和 c 捕获并显示屏幕截图。我知道这听起来很愚蠢,最终我将在不同的程序中需要这些功能中的每一个,捕获屏幕的那个会将图像发送到显示它的那个,但现在我只是想让它们都在一个程序中工作.到目前为止,这是我整理的代码:

     #include <windows.h>

bool ScreenCapture(int x, int y, int width, int height){
// get a DC compat. w/ the screen
HDC hDc = CreateCompatibleDC(0);

// make a bmp in memory to store the capture in
HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height);

// join em up
SelectObject(hDc, hBmp);

// copy from the screen to my bitmap
BitBlt(hDc, 0, 0, width, height, GetDC(0), x, y, SRCCOPY);

HDC myhDc = GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);

BitBlt(myhDc, 0, 0, width, height, hDc, x, y, SRCCOPY);

//Display bitmap
DrawBitmap(myhDC,0,0,hBmp,SRCCOPY);

//GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);

// free the bitmap memory
DeleteObject(hBmp);

return 0;
}

int main(){
ScreenCapture(500, 200, 300, 300);
system("pause");
}

我只是找不到任何显示 HBITMAP 的方法。如何显示 HBITMAP?

更新:我添加了 DrawBitmap,但它不起作用...我得到以下输出但不知道如何处理它:

“win_screenshot.exe”:已加载“C:\Users\mbrooker\Documents\Visual Studio 2010\Projects\win_screenshot\Debug\win_screenshot.exe”,已加载符号。 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\ntdll.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\kernel32.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\KernelBase.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\user32.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\gdi32.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\lpk.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\usp10.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\msvcrt.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\advapi32.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\sechost.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\rpcrt4.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\sspicli.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\cryptbase.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\imm32.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\msctf.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“C:\Windows\SysWOW64\apphelp.dll”,找不到或打开 PDB 文件 “win_screenshot.exe”:已加载“ImageAtBase0x4ab60000”,包含/排除设置禁用加载。 “win_screenshot.exe”:已卸载“ImageAtBase0x4ab60000” 程序“[1480] win_screenshot.exe: Native”已退出,代码为 0 (0x0)。

【问题讨论】:

  • 您不能在控制台模式应用程序中显示位图。

标签: c windows windows-7 hbitmap gdi


【解决方案1】:

显示HBITMAP 将涉及将它(例如通过BitBlt)传送到另一个DC。以类似于您已经在做的方式,只是到另一个 DC,例如窗口的 DC,请参阅GetDC。

MSDN为您提供示例代码:Scaling an Image,见DrawBitmap函数。

【讨论】:

  • 谢谢,我添加了一个 DrawBitmap 函数,但它似乎不起作用。请参阅我上面的更新代码。我需要再次使用 BitBlt 吗?它不应该第一次将位转移到正确大小的矩形中吗?也许我只是不明白 BitBlt 在做什么。还是您不打算让我使用 DrawBitmap,而是使用他们在函数中使用的相同方法?
  • 您的代码甚至无法编译。它会泄漏 DC。我建议你买一本关于 GDI 编程的书,比如 Petzold 或 Richter。
猜你喜欢
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 2015-09-08
  • 2012-12-12
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多