The author has 3 posts.
Font size: Small - 100% (Default)  Content converter: No conversion
 
Clicks Replies
1211 2
【代码】GDI+将图像保存为文件
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 1 Posted at: 2/21/16 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
}
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 2 Posted at: 2/21/16 12:52
参考资料:
https://msdn.microsoft.com/en-us/library/ms533843%28VS.85%29.aspx
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 3 Posted at: 8/14/16 14:23
关于GetEncoderClsid函数的内部细节,请参阅:https://zh.arslanbar.net/post.php?t=24325
Reply the post
Content:
User: You are currently anonymous.
Captcha:
Unclear? Try another one.
(Shortcut key: Ctrl+Enter)
Post Information
Clicks: 1211 Replies: 2
Author: 巨大八爪鱼
Last reply: 巨大八爪鱼
Last reply time: 8/14/16 14:23
Bar Good Posts
Announcements