抓屏
来源:互联网 发布:淘宝卖家怎么开通达人 编辑:程序博客网 时间:2024/04/28 05:23
一.截取整个屏幕:
CDC dc;
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
CRect rect;
GetClientRect(&rect);
//int Width=GetSystemMetrics(SM_CXSCREEN);
//int Height=GetSystemMetrics(SM_CYSCREEN);
int Width=rect.Width();
int Height=rect.Height();
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
//LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
/**//////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
/**////////////////////////////////////
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
//bm.GetBitmapBits(size,lpData);//此函数在处理5-5-5模式的16位色下会出现颜色混乱
/**///////////////////////////////
int nCount = 0;
static int filecount=0;
CString name;
CString m_Path;
m_Path = "D:/MAP";
name.Format("pict%04d.bmp",filecount++);
name=m_Path+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite))
...{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
nCount++;
}
//GlobalFreePtr(lpData);
GlobalFree(lpData);
/**//*if(nCount==1)
m_Number.Format("%d picture captured.",nCount);
else
m_Number.Format("%d pictures captured.",nCount);*/
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
CRect rect;
GetClientRect(&rect);
//int Width=GetSystemMetrics(SM_CXSCREEN);
//int Height=GetSystemMetrics(SM_CYSCREEN);
int Width=rect.Width();
int Height=rect.Height();
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
//LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
/**//////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
/**////////////////////////////////////
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
//bm.GetBitmapBits(size,lpData);//此函数在处理5-5-5模式的16位色下会出现颜色混乱
/**///////////////////////////////
int nCount = 0;
static int filecount=0;
CString name;
CString m_Path;
m_Path = "D:/MAP";
name.Format("pict%04d.bmp",filecount++);
name=m_Path+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite))
...{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
nCount++;
}
//GlobalFreePtr(lpData);
GlobalFree(lpData);
/**//*if(nCount==1)
m_Number.Format("%d picture captured.",nCount);
else
m_Number.Format("%d pictures captured.",nCount);*/
二.截取客户区图形:
BITMAPINFO bi;//信息头
void *pBits=NULL;
CRect rect;//客户区窗口
GetClientRect(&rect);
int nWidth=rect.right;
int nHeight=rect.bottom;
//填充信息头
ZeroMemory(&bi,sizeof(bi));
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biHeight=nHeight;
bi.bmiHeader.biWidth=nWidth;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=3*nWidth*nHeight;
//拷贝客户区至内存DC
//HDC hActiveDC=::GetDC(GetSafeHwnd());//参数
HDC hActiveDC=::GetDC(this->m_hWnd);
HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC);
HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom);
SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap);
//把hActiveDC句柄所指定的当前客户区图复制到hActiveWndCompatibleDC中
BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,hActiveDC,0,0,SRCCOPY);
//保存内存DC
HDC hBmpFileDC=CreateCompatibleDC(hActiveWndCompatibleDC);
//创建一个位图可用作直接进行写操作
HBITMAP hBmpFileBitmap=CreateDIBSection(hActiveWndCompatibleDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
SelectObject(hBmpFileDC,hBmpFileBitmap);
BitBlt(hBmpFileDC,0,0,nWidth,nHeight,hActiveWndCompatibleDC,0,0,SRCCOPY);
CString tempFileName;//目标文件名
tempFileName = "D:/MAP.bmp";
HANDLE hFile=CreateFile(tempFileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile!=INVALID_HANDLE_VALUE)
...{
DWORD dwRet=0;
//填充文件头
BITMAPFILEHEADER bmfHeader;
ZeroMemory(&bmfHeader,sizeof(bmfHeader));
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
bmfHeader.bfType='MB';
WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
CloseHandle(hFile);
}
void *pBits=NULL;
CRect rect;//客户区窗口
GetClientRect(&rect);
int nWidth=rect.right;
int nHeight=rect.bottom;
//填充信息头
ZeroMemory(&bi,sizeof(bi));
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biHeight=nHeight;
bi.bmiHeader.biWidth=nWidth;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=3*nWidth*nHeight;
//拷贝客户区至内存DC
//HDC hActiveDC=::GetDC(GetSafeHwnd());//参数
HDC hActiveDC=::GetDC(this->m_hWnd);
HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC);
HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom);
SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap);
//把hActiveDC句柄所指定的当前客户区图复制到hActiveWndCompatibleDC中
BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,hActiveDC,0,0,SRCCOPY);
//保存内存DC
HDC hBmpFileDC=CreateCompatibleDC(hActiveWndCompatibleDC);
//创建一个位图可用作直接进行写操作
HBITMAP hBmpFileBitmap=CreateDIBSection(hActiveWndCompatibleDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
SelectObject(hBmpFileDC,hBmpFileBitmap);
BitBlt(hBmpFileDC,0,0,nWidth,nHeight,hActiveWndCompatibleDC,0,0,SRCCOPY);
CString tempFileName;//目标文件名
tempFileName = "D:/MAP.bmp";
HANDLE hFile=CreateFile(tempFileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile!=INVALID_HANDLE_VALUE)
...{
DWORD dwRet=0;
//填充文件头
BITMAPFILEHEADER bmfHeader;
ZeroMemory(&bmfHeader,sizeof(bmfHeader));
bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
bmfHeader.bfType='MB';
WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
CloseHandle(hFile);
}
- 抓屏
- 抓屏
- 抓屏的技巧
- 屏幕抓屏
- C# 抓屏程序
- C#抓屏
- C#抓屏
- C#抓屏
- 抓屏 截图
- 用c#抓屏
- VB 抓屏
- 抓屏函数
- SDK 抓屏程序
- SDK 抓屏程序
- java抓屏
- C#抓屏
- Android抓屏源码
- vb.net抓屏
- 如何设置用ASP.NET上传大文件问题
- 想精通咖啡的不要错过了---麦咖啡规则的通配符
- 几个比较好的技术网站
- IE浏览器的菜单栏和工具栏原理
- HTML结构化:实践DIV+CSS网页布局入门指南
- 抓屏
- action english2005_223
- 打开,另存为,属性等14个JS代码
- const_cast
- javascript函数大全
- wxWidgets中的事件处理
- 恶搞熊猫烧香 网友爆笑诗词句大集合
- javascript中的对象模型
- EJB3.0依赖注入深入