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