怎样随意截取显示在客户区里的图像,并保存成Jpg或Gif或Bmp格式!谢谢 万分感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里有一个保存成BMP的例子,不知是否有用http://expert.csdn.net/Expert/topic/1574/1574488.xml?temp=.560589 CDC dc; dc.CreateDC("DISPLAY",NULL,NULL,NULL); CBitmap bm; int Width=GetSystemMetrics(SM_CXSCREEN);//截取图形的宽度 int Height=GetSystemMetrics(SM_CYSCREEN);//高度 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)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); static int filecount=0; BITMAPFILEHEADER bfh; bfh.bfReserved1=bfh.bfReserved2=0; bfh.bfType=((WORD)('M'<< 8)|'B'); bfh.bfSize=54+size; bfh.bfOffBits=54; CString m_strTempBmp; m_strTempBmp.Format("%s%s","c:\\","temp.bmp"); CFile bf; if(bf.Open(m_strTempBmp,CFile::modeCreate|CFile::modeWrite)) { bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER)); bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER)); bf.WriteHuge(lpData,size); bf.Close(); } GlobalFree(lpData); socket编程的一个基本又不知所措问题 请高手…… ActiveX 在IE中调用 ,被IE阻止 ,认为是以不安全方式使用ActiveX控件? 求教一个打开文件的方法 CSocket写的文件传输程序能支持广域网传输吗? 图片怎么显示不出来了,请帮帮忙 急问:如何在文件中增加一些其他信息? vc做的ocx控件接口函数如何传递复杂结构的参数? 请问在GetCommandLine()后怎么处理得到的命令行参数? ON_EVENT的编译错误 谁知道哪里有各种启动封面供下载! 哪位高手有比较好的mfc程序? 唉,爱国与扯淡爱国 (100$)
http://expert.csdn.net/Expert/topic/1574/1574488.xml?temp=.560589
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
int Width=GetSystemMetrics(SM_CXSCREEN);//截取图形的宽度
int Height=GetSystemMetrics(SM_CYSCREEN);//高度
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)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);
static int filecount=0;
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CString m_strTempBmp;
m_strTempBmp.Format("%s%s","c:\\","temp.bmp");
CFile bf;
if(bf.Open(m_strTempBmp,CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
}
GlobalFree(lpData);