保存界面cd的内容图片到本地

首先需要一个GDI+取得不同类型图片编码类型的函数

 1 int GetEncoderClsid( const WCHAR* format, CLSID* pClsid ) 
 2 {
 3     UINT  num = 0;          // number of image encoders
 4     UINT  size = 0;         // size of the image encoder array in bytes
 5   
 6     ImageCodecInfo* pImageCodecInfo = NULL;
 7   
 8     GetImageEncodersSize(&num, &size);
 9     if(size == 0)
10         return -1;  // Failure
11   
12     pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
13     if(pImageCodecInfo == NULL)
14         return -1;  // Failure
15   
16     GetImageEncoders(num, size, pImageCodecInfo);
17   
18     for(UINT j = 0; j < num; ++j)
19     {
20         if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
21         {
22             *pClsid = pImageCodecInfo[j].Clsid;
23             free(pImageCodecInfo);
24             return j;  // Success
25         }    
26     }
27   
28     free(pImageCodecInfo);
29     return -1;  // Failure
30   
31 }
View Code

 

下面是调用方法,你可以放到任何你想要的地方(注:如果你想要的是背景,要放到OnEraseBkgnd(CDC* pDC)中)

 1  CDC* pdc = GetDC( ); CRect RT; GetClientRect( &RT ); //取得屏幕DC(你绘图的那个DC)及绘图区域
 2      
 3     CDC memdc; memdc.CreateCompatibleDC( pdc ); //创建内存DC
 4     CBitmap membmp; 
 5  membmp.CreateCompatibleBitmap( pdc, RT.Width( ), RT.Height( ) ); //创建内存位图
 6     memdc.SelectObject( &membmp ); //DC与位图勾连
 7     memdc.BitBlt( 0,0, RT.Width( ), RT.Height( ), pdc, 0, 0, SRCCOPY ); //将屏幕DC(你绘图的那个DC)内容拷贝到内存DC当中,相当与将你的绘图拷贝到了membmp上。
 8      memdc.SetBkMode(TRANSPARENT);  
 9   
10     Bitmap gBitMap( ( HBITMAP )membmp.m_hObject, NULL ); //创建通过构造函数或者通过FromHBITMAP函数创建一个Bitmap,注意它和Image的区别,一般不用Image,Image功能太少,是Bitmap的基类
11      
12     CLSID bmpClsid;
13     GetEncoderClsid(L"image/bmp", &bmpClsid);
14     gBitMap.Save(L"c:\\1.bmp", &bmpClsid, NULL); //保存成bmp
15      
16     CLSID pngid;
17     GetEncoderClsid(L"image/png", &pngid);
18     gBitMap.Save(L"c:\\1.png",&pngid,NULL); //保存成png
19  membmp.DeleteObject( );
20   memdc.DeleteDC( );
21   i = 0;
22 }
View Code

 

posted @ 2017-04-18 09:35  Kagen  阅读(120)  评论(0)    收藏  举报