• c++基于CImage实现图片格式转换完整源代码


    最近遇到项目需要,对图片进行格式转换,抱着怎么简单怎么做的想法,于是进行了验证,代码参考自网络,进行了简单的修改。

    我这里提供完整的代码。

    直接上代码:

    头文件:

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #ifdef DLLIMPORT
    6. #define _DLL_DECLARE_ __declspec(dllimport)
    7. #else
    8. #define _DLL_DECLARE_ __declspec(dllexport)
    9. #endif
    10. _DLL_DECLARE_ int testLocalCode();
    11. // 获取夹具类型
    12. _DLL_DECLARE_ bool ConvertImage(std::string sSrcImgPath, std::string sDstImgPath);

    实现文件:

    1. #include "stdafx.h"
    2. #include "atlimage.h"
    3. #include "ImageFormatConventor.h"
    4. _DLL_DECLARE_ int testLocalCode()
    5. {
    6. return 0;
    7. }
    8. _DLL_DECLARE_ bool ConvertImage(std::string sSrcImgPath, std::string sDstImgPath)
    9. {
    10. CString strSrcFile(sSrcImgPath.c_str());
    11. CString strDstFile(sDstImgPath.c_str());
    12. // 根据目标文件的后缀确定要转换成的目标文件类型
    13. // 使用CImage实现不同格式图片文件的转换
    14. if (strDstFile.IsEmpty())
    15. {
    16. return FALSE;
    17. }
    18. CImage img;
    19. HRESULT hResult = img.Load(strSrcFile); // 加载源图片文件
    20. if (hResult != S_OK)
    21. {
    22. return FALSE;
    23. }
    24. GUID guidFileType = Gdiplus::ImageFormatPNG; // 默认保存为png图片
    25. CString strExt;
    26. int nIndex = strDstFile.ReverseFind(_T('.'));
    27. if (nIndex != -1)
    28. {
    29. strExt = strDstFile.Right(strDstFile.GetLength() - nIndex - 1);
    30. if (strExt == _T("png"))
    31. {
    32. guidFileType = Gdiplus::ImageFormatPNG;
    33. }
    34. else if (strExt == _T("jpg"))
    35. {
    36. guidFileType = Gdiplus::ImageFormatJPEG;
    37. }
    38. else if (strExt == _T("bmp"))
    39. {
    40. guidFileType = Gdiplus::ImageFormatBMP;
    41. }
    42. else if (strExt == _T("gif"))
    43. {
    44. guidFileType = Gdiplus::ImageFormatGIF;
    45. }
    46. else
    47. {
    48. guidFileType = Gdiplus::ImageFormatPNG;
    49. }
    50. }
    51. hResult = img.Save(strDstFile, guidFileType); // 保存为目标文件
    52. if (hResult != S_OK)
    53. {
    54. return FALSE;
    55. }
    56. return TRUE;
    57. }

    亲测有效,欢迎交流与讨论。

  • 相关阅读:
    论文阅读笔记 | 三维目标检测——MV3D算法
    面试突击72:输入URL之后会执行什么流程?
    (5)点云数据处理学习——其它官网例子2
    MongoDB
    [第四篇]——Windows Docker 安装
    大数据发展趋势及动态
    华为云Stack的学习(九)
    mac下安装python并编写脚本实现s3上传功能
    什么是MVC
    Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol
  • 原文地址:https://blog.csdn.net/autumoonchina/article/details/134425693