使用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 閱讀(5893) 評論(1) 編輯 收藏 引用 所屬分類: gdi/gdi+

