// 創建位圖並繪製
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
}