小步慢跑

 

使用GDIPlus 保存HBITMAP到磁盘文件,转换图片格式

先定义一个方法获取指定的图片格式的编码器。摘自msdn

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

下面的代码可以把一个GDI中使用的HBITMAP句柄保存到磁盘

   1: CLSID bmpClsid;
   2: GetEncoderClsid(L"image/bmp", &bmpClsid);
   3:  
   4: //保存到磁盘上的bmp文件
   5: Gdiplus::Bitmap bitmap(hBitmap,NULL);
   6: bitmap.Save(L"1.bmp", &bmpClsid, NULL);
   7:  
   8: // 转换为png,再保存到磁盘上
   9: CLSID pngid;
  10: GetEncoderClsid(L"image/png", &pngid);
  11: bitmap.Save(L"1.png",&pngid,NULL);

下面的代码从磁盘上读取一个jpg文件,转换为bmp再保存到磁盘上

   1: Gdiplus::Image * pImage = Gdiplus::Image::FromFile(L"E:/Dropbox/MyDocument/美图图库/示例图片_03.jpg");
   2: pImage->Save(L"2.bmp",&bmpClsid,NULL);

posted on 2012-08-30 13:42 zaccheo 阅读(5525) 评论(1)  编辑 收藏 引用 所属分类: gdi/gdi+

评论

# re: 使用GDIPlus 保存HBITMAP到磁盘文件,转换图片格式 2015-03-28 15:44 王小亮

写的很好,学习了。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类(23)

随笔档案(26)

文章分类(1)

文章档案(1)

csdn

搜索

最新评论

阅读排行榜

评论排行榜