C++实现窗口截图

文章目录

  • 前言
  • 一、类库介绍
  • 二、使用方法
  • 三、代码讲解

前言

对学习C/C++感兴趣的同学可以看看这篇文章哦:C/C++教程

本文主要介绍一下在VC++环境下,实现窗口截图的方法

一、类库介绍

既然是使用别人发明的图片格式,自然是使用对应的类库对图片进行操作

本文用到的类库为C++模板库,只要安装了VS(visual studio),并安装了C++开发工具包,都有这个库

在这里插入图片描述

二、使用方法

该库里存在一个图像类CImage

只要将一个窗口的设备上下文(Device context,简称DC)复制到该类,就能将该窗口的图像保存为图片,使用起来特别简单

主要用到的类和函数:

GetDeviceCaps(m_hDc, BITSPIXEL); //获取窗口DC像素的大小GetDeviceCaps(m_hDc, HORZRES);  //获取窗口DC宽度GetDeviceCaps(m_hDc, VERTRES);  //获取窗口DC高度GetDpiForWindow(m_hWnd); //获取窗口单位英寸像素个数,一般电脑像素过大,windows为正常显示图标,会放大该数值,所以需要依靠该数值调整DC大小,否则截图会出现大小不适配的问题CImage image;//用于图片操作的类image.Create(m_width, m_hight, m_bitOfPix);//为该类创建与原窗口一样大小的DCBitBlt(m_hImgDc, 0, 0, m_width, m_hight, m_hDc, 0, 0, SRCCOPY); //将窗口DC图像复制到imagem_image.Save(name, Gdiplus::ImageFormatBMP); //将图像数据保存为对应文件

三、代码讲解

#include
#include
using namespace std;
//name:保存的文件名
//hWnd:要截图的窗口句柄,NULL表示对桌面截图
bool SavePic(wstring name,HWND hWnd) {HDC hDc=NULL;hWnd = (hWnd == NULL) ? GetDesktopWindow() : hWnd; //判断窗口句柄是否为NULL,如果为NULL则默认获取桌面DChDc = GetDC(hWnd); //获取DCif (hDc == NULL) return false;int bitOfPix = GetDeviceCaps(hDc, BITSPIXEL); //获取DC像素的大小int width = GetDeviceCaps(hDc, HORZRES);  //获取DC宽度int hight = GetDeviceCaps(hDc, VERTRES);  //获取DC高度UINT dpi = GetDpiForWindow(hWnd); //获取dpifloat fold; //根据dpi计算放大倍数switch (dpi) { case 96:fold = 1;break;case 120:fold = 1.25;break;case 144:fold = 1.5;break;case 192:fold = 2;break;case 216:fold = 2.25;break;default:fold = 1;break;}width *= fold; //复原宽度hight *= fold; //复原高度CImage image;image.Create(width, hight, bitOfPix); //为图像类创建与窗口DC相同大小的DCBitBlt(image.GetDC(), 0, 0, width, hight, hDc, 0, 0, SRCCOPY); //将窗口DC图像复制到imageimage.Save(name.data(), Gdiplus::ImageFormatPNG); //保存为png格式图片文件image.ReleaseDC(); //释放DCReleaseDC(hWnd, hDc); //释放DC资源
}
int main() {SavePic(L"1.png",NULL);//对桌面截图,保存为1.png文件
}

支持保存的图片格式参数有:

Gdiplus::ImageFormatUndefined
Gdiplus::ImageFormatMemoryBMP 
Gdiplus::ImageFormatBMP
Gdiplus::ImageFormatEMF 
Gdiplus::ImageFormatWMF 
Gdiplus::ImageFormatJPEG 
Gdiplus::ImageFormatPNG 
Gdiplus::ImageFormatGIF 
Gdiplus::ImageFormatTIFF 
Gdiplus::ImageFormatEXIF 
Gdiplus::ImageFormatIcon 
Gdiplus::ImageFormatHEIF
Gdiplus::ImageFormatWEBP

可根据参数后缀确定保存文件类型

运行后,可在当前程序目录查看图片

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部