C++-VC如何将bmp格式转换成png

WP主题Bug提交 WP主题Bug提交 主题:1067 回复:2226

C++-VC如何将bmp格式转换成png

虐人心 发布于 2017-02-14 字数 79 浏览 1022 回复 1

VC中如何将bmp格式的图片转换成png?有没有专门的API? 或者说使用GDI+的库?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

清晨说ぺ晚安 2017-07-16 1 楼

使用C或者C++的话可以有多种方式,这里简单列举下思路,仅供参考。

方法一:使用CDXGraph类

代码如下:

IStream CDXGraph::StretchPic(const WCHAR path, const WCHAR format, int width, int heigh)
{
Bitmap orgpic(path) ;
Image
Despic = orgpic.GetThumbnailImage(width,heigh) ;

IStream* pstm = NULL;   

CLSID encoderClsid ;  
GetEncoderClsid(format,&encoderClsid) ;  
CString name;

    name = "Debug\1.bmp";

Status sta =Despic->Save(name.AllocSysString(),&encoderClsid,0) ; //Despic->Save(pstm, &encoderClsid,0);  
if (sta == Ok)  
{  
    return pstm ;  
}  
return NULL ;  

}

int CDXGraph::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;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo
)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1;
}

方法二:使用CxImage图像处理类库

这个类库功能十分强大,具体可以在网上搜索一下教程(比如这篇),基本思路就是加载进图片Load 、保存Save为CXIMAGE_FORMAT_PNG即可。

方法三:使用MFC中的CImage

include "atlimage.h"

.....
CImage image;
image.Load(_T("D:\1.bmp"));
image.Save(_T("D:\1.png"));