如果抓图,保存成JPG格式? 大家帮帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Print Screen打开画图粘贴另存为*.jpg HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap, hOldBitmap; // 位图句柄 //为屏幕创建设备描述表 hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); //为屏幕设备描述表创建兼容的内存设备描述表 hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标 // 获得屏幕分辨率 int nWidth=GetSystemMetrics(SM_CXSCREEN); int nHeight=GetSystemMetrics(SM_CYSCREEN);//得到屏幕长和宽 // 创建一个与屏幕设备描述表兼容的位图 hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight); // 把新位图选到内存设备描述表中 hOldBitmap =(HBITMAP)::SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中 BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY); SetTextColor(hMemDC,RGB(255,0,0)); CString str; CTime tt=CTime::GetCurrentTime(); str.Format(" %d年%02d月%02d日 %02d:%02d:%02d",tt.GetYear(), tt.GetMonth(), tt.GetDay(), tt.GetHour(), tt.GetMinute(), tt.GetSecond()); SetBkMode(hMemDC,TRANSPARENT); TextOut(hMemDC,50,50,_T(str),str.GetLength()); //得到屏幕位图的句柄 hBitmap = (HBITMAP)::SelectObject(hMemDC, hOldBitmap); //清除 DeleteDC(hScrDC); DeleteDC(hMemDC); // 返回位图句柄hBitmap; CxImage jpegImage; jpegImage.CreateFromHBITMAP(hBitmap); if(!InitPicDirectory()) return; str.Format("%s\\%02d%02d%02d.jpg", strPicDirectory, tt.GetHour(), tt.GetMinute(), tt.GetSecond()); jpegImage.Save(_T(str),CXIMAGE_FORMAT_JPG); 其中cximage是从codeproject上下载的一个库,很有名,很有用的,initpicdirectory是我编的一个函数,你就不必用了。思路很简单,在内存中创建位图,然后将指定区域的内存位图存为jpg格式的,不但是jpg,很多种格式都可以。强烈推荐。 因为#define CXIMAGE_SUPPORT_JPG 0 http://www.codeproject.com/bitmap/cximage.asp 菜鸟请教按钮子类化,处理函数问题 计算位图大小 关于设备描述表的问题 请大家帮忙出出主意 文件读写的问题,各位来看一下 ( ((( MSDN2003下载 ))) ) 如何利用VC将串口传输数据保存到SQL数据库,再从数据库中取出用TeeChart控件画图 windows 控制台程序设置 HOOK 求救!! 一个想不明白的问题... 放大载入的图片?保存图片? 我利用双休日的两个下午的时间跑遍了南京的大小书店,都没买到《Visual C++技术内幕》第四版,气愤!:( SetEvent,WaitForSingleObject这几个函数什么意思啊? 怎样在串口通信中用不标准的波特率??
打开画图
粘贴
另存为*.jpg
// 屏幕和内存设备描述表
HBITMAP hBitmap, hOldBitmap;
// 位图句柄
//为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得选定区域坐标
// 获得屏幕分辨率
int nWidth=GetSystemMetrics(SM_CXSCREEN);
int nHeight=GetSystemMetrics(SM_CYSCREEN);//得到屏幕长和宽
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap =(HBITMAP)::SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight,
hScrDC, 0, 0, SRCCOPY);
SetTextColor(hMemDC,RGB(255,0,0));
CString str;
CTime tt=CTime::GetCurrentTime();
str.Format(" %d年%02d月%02d日 %02d:%02d:%02d",tt.GetYear(),
tt.GetMonth(),
tt.GetDay(),
tt.GetHour(),
tt.GetMinute(),
tt.GetSecond());
SetBkMode(hMemDC,TRANSPARENT);
TextOut(hMemDC,50,50,_T(str),str.GetLength());
//得到屏幕位图的句柄
hBitmap = (HBITMAP)::SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄hBitmap;
CxImage jpegImage;
jpegImage.CreateFromHBITMAP(hBitmap);
if(!InitPicDirectory())
return;
str.Format("%s\\%02d%02d%02d.jpg",
strPicDirectory,
tt.GetHour(),
tt.GetMinute(),
tt.GetSecond());
jpegImage.Save(_T(str),CXIMAGE_FORMAT_JPG);
initpicdirectory是我编的一个函数,你就不必用了。思路很简单,在内存中创建位图,然后将指定区域的内存位图存为jpg格式的,不但是jpg,很多种格式都可以。强烈推荐。