最近遇到项目需要,对图片进行格式转换,抱着怎么简单怎么做的想法,于是进行了验证,代码参考自网络,进行了简单的修改。
我这里提供完整的代码。
直接上代码:
头文件:
#pragma once#include <map>
#include <string>
#include <vector>#ifdef DLLIMPORT
#define _DLL_DECLARE_ __declspec(dllimport)
#else
#define _DLL_DECLARE_ __declspec(dllexport)
#endif_DLL_DECLARE_ int testLocalCode();// 获取夹具类型
_DLL_DECLARE_ bool ConvertImage(std::string sSrcImgPath, std::string sDstImgPath);
实现文件:
#include "stdafx.h"#include "atlimage.h"
#include "ImageFormatConventor.h"_DLL_DECLARE_ int testLocalCode()
{return 0;
}_DLL_DECLARE_ bool ConvertImage(std::string sSrcImgPath, std::string sDstImgPath)
{CString strSrcFile(sSrcImgPath.c_str());CString strDstFile(sDstImgPath.c_str());// 根据目标文件的后缀确定要转换成的目标文件类型// 使用CImage实现不同格式图片文件的转换if (strDstFile.IsEmpty()){return FALSE;}CImage img;HRESULT hResult = img.Load(strSrcFile); // 加载源图片文件if (hResult != S_OK){return FALSE;}GUID guidFileType = Gdiplus::ImageFormatPNG; // 默认保存为png图片CString strExt;int nIndex = strDstFile.ReverseFind(_T('.'));if (nIndex != -1){strExt = strDstFile.Right(strDstFile.GetLength() - nIndex - 1);if (strExt == _T("png")){guidFileType = Gdiplus::ImageFormatPNG;}else if (strExt == _T("jpg")){guidFileType = Gdiplus::ImageFormatJPEG;}else if (strExt == _T("bmp")){guidFileType = Gdiplus::ImageFormatBMP;}else if (strExt == _T("gif")){guidFileType = Gdiplus::ImageFormatGIF;}else{guidFileType = Gdiplus::ImageFormatPNG;}}hResult = img.Save(strDstFile, guidFileType); // 保存为目标文件if (hResult != S_OK){return FALSE;}return TRUE;
}
亲测有效,欢迎交流与讨论。