目前共有3篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:台灣正體▼
 
點擊 回復
549 2
【代碼】GDI+將圖像保存為文件
一派掌門 二十級
1樓 發表于:2016-2-21 12:52
// 創建位圖並繪製
Bitmap bitmap(200, 200);
Graphics gbmp(&bitmap);
SolidBrush brush(Color(0, 255, 255));
gbmp.FillRectangle(&brush, 10, 10, 150, 150);

// 保存為bmp文件
// 圖像中未繪製的部分自動變成黑色
CLSID id, id2;
GetEncoderClsid(L"image/bmp", &id);
bitmap.Save(TEXT("myimage.bmp"), &id);

brush.SetColor(Color(255, 0, 255));
gbmp.FillRectangle(&brush, 40, 40, 80, 80);

// 保存為png文件
// 圖像中未繪製的部分自動變為透明
GetEncoderClsid(L"image/png", &id2);
bitmap.Save(TEXT("myimage.png"), &id2);


// 其中GetEncoderClsid函數不是自帶的,要自己定義
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
   UINT  num = 0;          // number of image encoders
   UINT  size = 0;         // size of the image encoder array in bytes

   ImageCodecInfo* pImageCodecInfo = NULL;

   GetImageEncodersSize(&num, &size);
   if(size == 0)
      return -1;  // Failure

   pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
   if(pImageCodecInfo == NULL)
      return -1;  // Failure

   GetImageEncoders(num, size, pImageCodecInfo);

   for(UINT j = 0; j < num; ++j)
   {
      if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
      {
         *pClsid = pImageCodecInfo[j].Clsid;
         free(pImageCodecInfo);
         return j;  // Success
      }   
   }

   free(pImageCodecInfo);
   return -1;  // Failure
}
一派掌門 二十級
2樓 發表于:2016-2-21 12:52
 
一派掌門 二十級
3樓 發表于:2016-8-14 14:23
關於GetEncoderClsid函數的內部細節,請參閱:https://zh.arslanbar.net/post.php?t=24325
 

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:549 回複數:2
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-8-14 14:23
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。