C++ BMP图片转换为PNG图片

本文介绍了一种使用Windows GDI+库将位图(BMP)文件转换为便携网络图形(PNG)格式的方法。通过C++代码示例展示了如何初始化GDI+环境、获取图像编码器ID、读取BMP文件并将其保存为PNG格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

BOOL GetEncoderClsid(WCHAR* pFormat,CLSID* pClsid)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR           gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

UINT num = 0,size = 0;
        ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num,&size);
if (size == 0)
{
return FALSE;
}
pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(malloc(size));
if (pImageCodecInfo == NULL)
{
return FALSE;
}
GetImageEncoders(num,size,pImageCodecInfo);
BOOL bfound = FALSE;
for (UINT i = 0;!bfound && i < num;  i++)
{
if (_wcsicmp(pImageCodecInfo[i].MimeType,pFormat) == 0)
{
*pClsid = pImageCodecInfo[i].Clsid;
bfound = TRUE;
}
}
GdiplusShutdown(gdiplusToken);
free(pImageCodecInfo);
return bfound;
}


BOOL BMptoPNG(LPCWSTR StrBMp,LPCWSTR StrPNG)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR           gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);


CLSID encoderClsid;
Status stat;
Image* image = NULL;
image = Gdiplus::Bitmap::FromFile(StrBMp,TRUE);
if (!GetEncoderClsid(L"image/png",&encoderClsid))
{
return FALSE;
}
stat = image->Save(StrPNG,&encoderClsid,NULL);
if (stat != Gdiplus::Ok)
{
return FALSE;
}
//Gdiplus::GdiplusShutdown(gdiplusToken);
delete image;
return TRUE;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值