C++图片格式的转换
使用静态库来转换,将include和lib文件拷贝至项目中,添加头文件
#include "stdafx.h"
#include "include/ximage.h"
#pragma comment(lib,"lib/cximage.lib")
#pragma comment(lib,"lib/png.lib")
#pragma comment(lib,"lib/jasper.lib")
#pragma comment(lib,"lib/jbig.lib")
#pragma comment(lib,"lib/Jpeg.lib")
#pragma comment(lib,"lib/libpsd.lib")
#pragma comment(lib,"lib/libdcr.lib")
#pragma comment(lib,"lib/mng.lib")
#pragma comment(lib,"lib/Tiff.lib")
#pragma comment(lib,"lib/zlib.lib")
int PictureFormatTrans(char *fromPath,char *toPath)
{
int filelen;
char *fromData;
FILE *pf = fopen(fromPath,"rb");
if(pf == NULL)
{
printf("%s 不存在",fromPath);
return -1;
}
else
{
fseek(pf,0,SEEK_END);
filelen = ftell(pf);
fseek(pf,0,SEEK_SET);
}
fromData = (char *)malloc(sizeof(char)*filelen);
fread(fromData,1,filelen,pf);
fclose(pf);
CxImage m_Image((BYTE*)fromData,filelen,CXIMAGE_FORMAT_JPG); //转换前的格式,各种格式均可,如果是JPG,填CXIMAGE_FORMAT_JPG
if(m_Image.IsValid()) //有效
{
int size = 0;
BYTE* buffer = 0;
int width = m_Image.GetWidth();
int height = m_Image.GetHeight();
int xdpi = m_Image.GetXDPI();
int ydpi = m_Image.GetYDPI();
m_Image.SetXDPI(180);
m_Image.SetYDPI(180);
int newWidth = width*180/xdpi;
int newHeight = height*180/ydpi;
m_Image.QIShrink(newWidth,newHeight);
m_Image.Save(toPath,CXIMAGE_FORMAT_BMP); //转换后的格式,各种格式均可,如果是BMP,填CXIMAGE_FORMAT_BMP
}
return 0;
}
如果编译报下列错误
解决方法:属性-》配置属性-》C/C++-》代码生成-》运行库,改为多线程(/MT)。