教程推荐:
人工智能教程,点击这里查看,通俗易懂,风趣幽默
C/C++教程,点击这里查看,以项目为主导从入门到精通
学习C++最大的乐趣就是其无所不能,今天带来C++实现窗口截屏的方法,可保存为jpg,png,bmp等多种常见图片格式!
很简陋,但很简单,主要是学习一下该库的使用,适合新手!
既然是使用别人发明的图片格式,自然是使用对应的类库对图片进行操作
本文用到的类库为C++模板库<atlimage.h>,只要安装了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);//为该类创建与原窗口一样大小的DC BitBlt(m_hImgDc, 0, 0, m_width, m_hight, m_hDc, 0, 0, SRCCOPY); //将窗口DC图像复制到image m_image.Save(name, Gdiplus::ImageFormatBMP); //将图像数据保存为对应文件
#include<string> #include<atlimage.h> using namespace std; //name:保存的文件名 //hWnd:要截图的窗口句柄,NULL表示对桌面截图 bool SavePic(wstring name,HWND hWnd) { HDC hDc=NULL; hWnd = (hWnd == NULL) ? GetDesktopWindow() : hWnd; //判断窗口句柄是否为NULL,如果为NULL则默认获取桌面DC hDc = GetDC(hWnd); //获取DC if (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); //获取dpi float 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相同大小的DC BitBlt(image.GetDC(), 0, 0, width, hight, hDc, 0, 0, SRCCOPY); //将窗口DC图像复制到image image.Save(name.data(), Gdiplus::ImageFormatPNG); //保存为png格式图片文件 image.ReleaseDC(); //释放DC ReleaseDC(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
可根据参数后缀确定保存文件类型
运行后,可在当前程序目录查看图片
联系客服