int GetEncoderClsid(constWCHAR* format, CLSID* pClsid)  
{  
    UINT num = 0;          // number of image encoders  
    UINT size = 0;         // size of the image encoder array in bytes  
   
    ImageCodecInfo* pImageCodecInfo = NULL;  
   
    //2.获取GDI+支持的图像格式编码器种类数以及ImageCodecInfo数组的存放大小  
    GetImageEncodersSize(&num, &size);  
    if(size == 0)  
        return -1; // Failure  
   
    //3.ImageCodecInfo数组分配足额空间  
    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));  
    if(pImageCodecInfo == NULL)   
        return -1; // Failure  
   
    //4.获取所有的图像编码器信息  
    GetImageEncoders(num, size, pImageCodecInfo);  
   
    //5.查找符合的图像编码器的Clsid  
    for(UINTj = 0; j < num; ++j)  
    {  
        if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )  
        {  
            *pClsid = pImageCodecInfo[j].Clsid;  
            free(pImageCodecInfo);  
            returnj// Success  
        }      
    }  
   
    //6.释放步骤3分配的内存  
    free(pImageCodecInfo);  
    return -1; // Failure  
}
 
//例子:任意格式转bmp格式
USES_CONVERSION;
Image *pImg=Image::FromFile(T2W("test.jpg"));
if (pImg!=NULL)
{
    // Get the CLSID of the bmp encoder.  
    CLSIDencoderClsid;
    GetEncoderClsid(T2W("image/bmp"), &encoderClsid);  
   
    if (Ok!=pImg->Save(T2W("test.bmp"), &encoderClsid, NULL))
    {  
        //保存成功
    }
    deletepImg;
    pImg=NULL;
}


本文链接地址: 使用GDI+转换图片格式
https://blog.qingfengju.com/index.asp?id=209

上一篇: 结束指定窗体hWnd所属的进程
下一篇: 安装故障恢复控制台

分类:Win32/C++ 查看次数:5630 发布时间:2010/4/10 17:31:32