GDI+ 图片转换png-bmp、jpg-bmp

#include <windows.h>  
#include <gdiplus.h>  
#include <stdio.h>  
using namespace Gdiplus;

#pragma comment(lib,"gdiplus")  

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;

    //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 (UINT j = 0; j < num; ++j)
    {
        if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)
        {
            *pClsid = pImageCodecInfo[j].Clsid;
            free(pImageCodecInfo);
            return j;  // Success  
        }
    }

    //6.释放步骤3分配的内存  
    free(pImageCodecInfo);
    return -1;  // Failure  
}

INT main()
{
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;

    //1.初始化GDI+,以便后续的GDI+函数可以成功调用  
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    CLSID   encoderClsid;
    Status  stat;

    //7.创建Image对象并加载图片
    Image* image = new Image(L"aaasssddd.jpg");

    // 选择目的图片的模板 
    GetEncoderClsid(L"image/bmp", &encoderClsid);

    ULONG encoderQuality = 100;
    EncoderParameters encoderParameters;
    encoderParameters.Count = 1;
    encoderParameters.Parameter[0].Guid = EncoderQuality;
    encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
    encoderParameters.Parameter[0].NumberOfValues = 1;
    encoderParameters.Parameter[0].Value = &encoderQuality;

    //8.调用Image.Save方法进行图片格式转换,并把步骤3)得到的图像编码器Clsid传递给它  
    stat = image->Save(L"11.bmp", &encoderClsid, &encoderParameters);
    //stat = image->Save(L"11.bmp", &encoderClsid, NULL);

    if (stat == Ok)
        printf("Bird.png was saved successfully/n");
    else
        printf("Failure: stat = %d/n", stat);

    //9.释放Image对象  
    delete image;
    //10.清理所有GDI+资源  
    GdiplusShutdown(gdiplusToken);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值