WEB开发网
开发学院软件开发C++ c++ 截取屏幕图片并保存 阅读

c++ 截取屏幕图片并保存

 2012-09-19 10:37:11 来源:WEB开发网   
核心提示: 屏幕捕捉技术第一步就是抓取屏幕的桌面虽然print screen键可以,但是在实际中就有点不适用了下面的代码可以拷贝到一个函数里面,c++ 截取屏幕图片并保存,执行就可以生成一个获取屏幕的bmp文件了//获取桌面窗口的CDCCDC *pdeskdc = GetDesktopWindow()->GetDC();

 屏幕捕捉技术第一步就是抓取屏幕的桌面
虽然print screen键可以,但是在实际中就有点不适用了
下面的代码可以拷贝到一个函数里面,执行就可以生成一个获取屏幕的bmp文件了

	//获取桌面窗口的CDC
	CDC *pdeskdc = GetDesktopWindow()->GetDC();  
	CRect re;
	//获取窗口的大小
	GetDesktopWindow()->GetClientRect(&re);
	CBitmap bmp;
	bmp.CreateCompatibleBitmap(pdeskdc , re.Width() , re.Height());
	//创建一个兼容的内存画板
	CDC memorydc;
	memorydc.CreateCompatibleDC(pdeskdc);

	//选中画笔
	CBitmap *pold = memorydc.SelectObject(&bmp);

	//绘制图像
	memorydc.BitBlt(0,0,re.Width() ,re.Height(), pdeskdc , 0 ,0 ,SRCCOPY) ;

	//获取鼠标位置,然后添加鼠标图像
	CPoint po;
	GetCursorPos(&po);
	HICON hinco = (HICON)GetCursor();
	memorydc.DrawIcon(po.x-10 , po.y - 10 , hinco);
	//选中原来的画笔
	memorydc.SelectObject(pold);
	BITMAP bit;
	bmp.GetBitmap(&bit);
//	DWORD size = bit.bmWidth * bit.bmHeight ;

	//定义 图像大小(单位:byte)
	DWORD size = bit.bmWidthBytes * bit.bmHeight ;
	LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR , size) ;

	//后面是创建一个bmp文件的必须文件头,想要了解可以参考msdn
	
	BITMAPINFOHEADER pbitinfo;
	pbitinfo.biBitCount = 24 ; 
	pbitinfo.biClrImportant = 0;
	pbitinfo.biCompression = BI_RGB ;
	pbitinfo.biHeight = bit.bmHeight ; 
	pbitinfo.biPlanes = 1 ;
	pbitinfo.biSize = sizeof(BITMAPINFOHEADER);
	pbitinfo.biSizeImage =size;
	pbitinfo.biWidth = bit.bmWidth;
	pbitinfo.biXPelsPerMeter = 0;
	pbitinfo.biYPelsPerMeter = 0 ;

	GetDIBits(pdeskdc->m_hDC , bmp , 0 , pbitinfo.biHeight , lpdata , 
		(BITMAPINFO*)&pbitinfo,DIB_RGB_COLORS);

	BITMAPFILEHEADER bfh;
	bfh.bfReserved1 = bfh.bfReserved2 = 0 ;
	bfh.bfType = ((WORD)('M'<< 8)|'B');
	bfh.bfSize = 54 + size ; 
	bfh.bfOffBits = 54 ;
	
	//写入文件

	CFile file;
	if ( file.Open("1.bmp" , CFile::modeCreate|CFile::modeWrite) )
	{
		file.WriteHuge( &bfh , sizeof(BITMAPFILEHEADER) );
		file.WriteHuge(&pbitinfo , sizeof(BITMAPINFOHEADER));
		file.WriteHuge(lpdata , size);
		file.Close();
	}
	GlobalFree(lpdata);

Tags:截取 屏幕 图片

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接