函数:捕获全屏图片
参数:LPRECT lpRect  图片大小

返回:HBITMAP  hBitmap

HBITMAP CopyScreenToBitmap(LPRECT lpRect)
{HDC hScrDC, hMemDC;HBITMAP hBitmap, hOldBitmap;int       nX, nY, nX2, nY2;int       nWidth, nHeight;int       xScrn, yScrn;if (IsRectEmpty(lpRect))return NULL;hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);hMemDC = CreateCompatibleDC(hScrDC);nX = lpRect->left;nY = lpRect->top;nX2 = lpRect->right;nY2 = lpRect->bottom;xScrn = GetDeviceCaps(hScrDC, HORZRES);yScrn = GetDeviceCaps(hScrDC, VERTRES);if (nX < 0)nX = 0;if (nY < 0)nY = 0;if (nX2 > xScrn)nX2 = xScrn;if (nY2 > yScrn)nY2 = yScrn;nWidth = nX2 - nX;nHeight = nY2 - nY;hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);DeleteDC(hScrDC);DeleteDC(hMemDC);return hBitmap;
}

函数:将Bitmap另存为文件
参数:HBITMAP hBitmap    图片数据

LPSTR lpFileName    文件路径名称

返回:成功/失败

bool SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName)
{                                                        HDC    hDC;int     iBits;WORD    wBitCount;DWORD          dwPaletteSize = 0, dwBmBitsSize, dwDIBSize, dwWritten;BITMAP         Bitmap;BITMAPFILEHEADER  bmfHdr;BITMAPINFOHEADER  bi;LPBITMAPINFOHEADER lpbi;HANDLE         fh, hDib, hPal;HPALETTE     hOldPal = NULL;hDC = CreateDC("DISPLAY", NULL, NULL, NULL);iBits = GetDeviceCaps(hDC, BITSPIXEL) *GetDeviceCaps(hDC, PLANES);DeleteDC(hDC);if (iBits <= 1)wBitCount = 1;else if (iBits <= 4)wBitCount = 4;else if (iBits <= 8)wBitCount = 8;else if (iBits <= 24)wBitCount = 24;elsewBitCount = 32;if (wBitCount <= 8)dwPaletteSize = (1 << wBitCount) * sizeof(RGBQUAD);GetObject(hBitmap, sizeof(BITMAP), (LPSTR)& Bitmap);bi.biSize = sizeof(BITMAPINFOHEADER);bi.biWidth = Bitmap.bmWidth;bi.biHeight = Bitmap.bmHeight;bi.biPlanes = 1;bi.biBitCount = wBitCount;bi.biCompression = BI_RGB;bi.biSizeImage = 0;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);*lpbi = bi;hPal = GetStockObject(DEFAULT_PALETTE);if (hPal){hDC = ::GetDC(NULL);hOldPal = SelectPalette(hDC, (HPALETTE)hPal, FALSE);RealizePalette(hDC);}GetDIBits(hDC, hBitmap, 0, (UINT)Bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER) + dwPaletteSize, (BITMAPINFO*)lpbi, DIB_RGB_COLORS);if (hOldPal){SelectPalette(hDC, hOldPal, TRUE);RealizePalette(hDC);::ReleaseDC(NULL, hDC);}fh = CreateFile(lpFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);if (fh == INVALID_HANDLE_VALUE)return FALSE;// 设置位图文件头bmfHdr.bfType = 0x4D42;  // "BM"dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;bmfHdr.bfSize = dwDIBSize;bmfHdr.bfReserved1 = 0;bmfHdr.bfReserved2 = 0;bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;WriteFile(fh, (LPSTR)& bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);WriteFile(fh, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize, &dwWritten, NULL);GlobalUnlock(hDib);GlobalFree(hDib);CloseHandle(fh);return TRUE;
}

调用方法:

bool ScreenshotRect(LPRECT rect, LPSTR lpFileName, CString& strErrmsg)
{HBITMAP hMap = CopyScreenToBitmap(rect);  //捕获图片if (hMap != nullptr){bool bSuccessSaveBitmp = SaveBitmapToFile(hMap, lpFileName);  //保存图片DeleteObject(hMap);if (!bSuccessSaveBitmp){strErrmsg = "截图存储失败!";}return bSuccessSaveBitmp;}else{strErrmsg = "截图失败";return false;}
}

C++捕获全屏(截全屏)相关推荐

  1. 谷歌浏览器如何截全屏图片?

    有时候想要截取浏览器全屏,谷歌浏览器自带截取全屏命令,操作步骤如下: 1.按住键盘的F12或者是空白处点击鼠标右键找到检查项 2.按住ctrl+shift+p,会出现搜索框的界面 3.搜索框中输入sc ...

  2. 上传文件、视频、图片、全选、全不选、截屏直接粘贴图片

    上传文件.视频.图片.全选.全不选.截屏直接粘贴图片 控制器代码:ObUnitsController.php <?phpnamespace App\Admin\Controllers;use A ...

  3. EasyClick 截全屏图压缩

    EasyClick 截全屏图压缩 随便瞎写,请勿喷. 效果图 tmp.jpg是压缩后的图片,原图是截屏直接保存的图片 720X1280分辨率 1440X2560分辨率 js 部分代码 /** Copy ...

  4. 谷歌浏览器截图截全屏

    谷歌浏览器截图截全屏 F12打开控制台 输入ctrl+shift+p 再输入full,然后回车,即可截取全屏图片

  5. mac上投屏android_全平台Win/Mac全设备Android/iOS 免费无线投屏神器

    東笙资源部落 [特别声明]所有软件皆来源于网上收集整理,所分享资源只做日常学习和交流使用,版权归原作者或原网站所有.不得用作其它用途,如有侵犯你的权益,请联系我们,将于24小时内进行删除,谢谢你的配合 ...

  6. c语言 游戏全屏,常用电脑快捷键全及游戏全屏问题.doc

    常用电脑快捷键全及游戏全屏问题 常用电脑快捷键大全 按"shift"+"6" 是省略号--, 方法:shift+6(主键盘上的6,就是Y键对上去的那个6),前提 ...

  7. yota3墨水屏设置_【YotaPhoneYOTA3评测】外观:没有全面屏但有墨水屏_YotaPhone YOTA 3_手机评测-中关村在线...

    外观:没有全面屏但有墨水屏 如果没有背面这块5.2英寸的电子墨水屏幕,也许你并不能发现YOTA3墨知版的特别之处,而加上这块墨水屏后,你一眼甚至都分不出哪是正面,哪是背面.同样都是2.5D玻璃,同样超 ...

  8. android dialog 横向全屏,Dialog全屏,去掉状态栏的方式

    dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...

  9. 远程桌面退出全屏/不能全屏/全屏切换的技巧

    远程桌面退出全屏/不能全屏/全屏切换的技巧退出全屏 问:我的电脑远程登录到服务器上并且切换到了全屏状态,全屏后发现桌面顶部没有浮动工具栏了,想退出全屏状态,不知如何退出了,最后,只有重启电脑.想知道如 ...

最新文章

  1. 简单安装与使用composer
  2. 【深度学习】一个应用—肝脏CT图像自动分割(术前评估)
  3. Scala操作外部数据
  4. 如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
  5. Discuz! X2.5 添加自定义数据调用模块
  6. leetcode -39组合总数
  7. { parser: babylon } is deprecated; we now treat it as { parser: babel }.
  8. 将多张连续的静态图转成gif动态图
  9. python之路 -- 并发编程之线程
  10. 强大的反编译软件Hopper Disassembler for Mac控制流程图详解
  11. mysql数据库学习汇总
  12. 小学计算机课评课稿,小学信息技术评课稿课件
  13. 【文化课每周学习记录】2019.4.7——2019.4.13
  14. 挺有意思的文章。。。
  15. 小白的破解WiFi之路1----VMware、kali安装
  16. java jcp_太久了,JCP:Eclipse考虑了新的Java规范流程
  17. 微信公众号开发者原生态的servlet
  18. parameter缩略语_通信缩略语和术语
  19. 高校计算机专业实践教学改革研究,民族高校计算机专业实践教学改革
  20. 用Python做了一个 盯盘机器人,股票价格实时监控,还能邮件通知你!

热门文章

  1. 继小米机器狗、特斯拉机器人后,小鹏汽车发布智能机器马:真的能骑!
  2. 【腾讯Bugly干货分享】程序员们也该知道的事——“期权和股票”
  3. python语言表白语句简单_简短的表白语句280句
  4. 面向未来,镭速助力企业构建文件安全外发新生态
  5. Android 动画之一 Drawable Animation —— 逐帧(Frame)动画
  6. 《论语》原文及其全文翻译 学而篇1
  7. app消息推送(ios/android)基础知识
  8. CTF MISC系列————8、Misc1-纵横四海
  9. 社区检测(网络分析)(图聚类)---进阶概念解析
  10. Hive输出文件的间隔符