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

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

我这里提供完整的代码。

直接上代码:

头文件:

#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;
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RSS订阅快速连接Notion

数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成&#xff0c;从而高效实现工作流程自动化&#xff0c;降本增效&#xff01; 1.产品介绍 RSS订阅是数环通的内置应用&#xff0c;很多用户通过RSS订阅来收集自己在各大平台上看的内容&#xff0c;当RSS…

关于2023年汉字小达人市级比赛的填空题,及孩子如何提高打字速度

2023年汉字小达人市级比赛安排确定了以后&#xff0c;有一些父母来咨询我市级比赛的题型和往年的真题情况&#xff0c;当了解到市级比赛真的有填空题以后&#xff0c;他们又开始焦虑了&#xff0c;因为孩子平时在家里从了必要的英语打卡等学习以外&#xff0c;刻意不让孩子过多…

【华为内部资料】《高速数字电路设计教材》(可下载)

与数字技术或软件相比&#xff0c;模拟技术人才的培养和造就仍然需要一定的实践和时间&#xff0c;但无论数字技术发展到任何阶段将永远离不开模拟技术。 由于难度系数较大的原因&#xff0c;有时即便投入很多精力&#xff0c;如果缺乏耐心、毅力和必要的条件&#xff0c;投入…

【面试经典150 | 位运算】数字范围按位与

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;公共前缀方法二&#xff1a;n & (n-1) 写在最后 Tag 【位运算】 题目来源 201. 数字范围按位与 题目解读 计算给定区间内所有整数的按位与的结果。 解题思路 本题朴素的方法是直接将区间内的所有整数按位与&…

java成员等

一个源文件只有一个public类 如何调用是这个 类里面有全局用类名调用(或者对象),非全局要新一个对象来调用 class Quanjv{public static int x1;public static int y2;public int y24;} public class chengyuan {public static void main(String[] args) {Quanjv quanjvn…

宏观角度认识递归之求根节点到叶节点数字之和

LCR 049. 求根节点到叶节点数字之和 - 力扣&#xff08;LeetCode&#xff09; 理解题意分析子问题&#xff1a;给一个头节点&#xff0c;要返回该头结点左右子树的根结点到叶节点数字和。此处还需注意&#xff1a;在获取根结点到叶节点数字和的时候&#xff0c;要传递一个参数&…

信道复用技术

信道复用技术&#xff1a;将多个信号通过同一个物理信道传输&#xff0c;以提高信道利用率和减少通信系统的成本 1.频分复用FDM(Frequency Division Multiplexing) 将多路基带信号调制到不同频率的载波上&#xff0c;再叠加形成一个复合信号的多路复用技术基带信号&#xff1…

excel数据文件的正常表达形式

正常有内容的excel文件是这样子 假若全部显示null 就没有修复的必要了 #数据恢复#

【Unity】Unity开发微信小游戏(三)工具使用Instant Game

Instant Game窗口通过Window->Auto Streaming打开。 也可参考官方详细说明 1.Texture Streaming 配置游戏内texture是否使用streaming功能&#xff0c;以及streaming placeholder的类型。AutoStreaming用placeholder图片替换游戏首包内的原始贴图&#xff0c;游戏运行时&a…

实用干货丨Eolink Apikit 配置和告警规则的各种用法

API在运行过程中可能会遇到各种异常情况&#xff0c;如响应时间过长、调用频率过高、请求参数错误等&#xff0c;这些异常会对系统的稳定性和性能产生严重影响。因此&#xff0c;对API进行异常监控和告警是非常必要的。本文将介绍 Eolink Apikit 中使用的告警规则&#xff0c;帮…

Python代码运行速度提升技巧!Python远比你想象中的快~

文章目录 前言一、使用内置函数二、字符串连接 VS join()三、创建列表和字典的方式四、使用 f-Strings五、使用Comprehensions六、附录- Python中的内置函数总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项…

全数字系列-麦克风K歌模组-搭配投影仪专业方案

麦克风学名传声器&#xff0c;是将声音信号转换为电信号的能量转换器件&#xff0c;也称话筒、微音器&#xff1b;主要包括拾音面和信号放大电路&#xff1b;利用微机械加工技术制作出来的电能换声器&#xff0c;具有体积小、频响特性好、噪声低、高集成度和适于大批量生产的特…

FSOD论文阅读 - 基于卷积和注意力机制的小样本目标检测

来源:知网 标题:基于卷积和注意力机制的小样本目标检测 作者:郭永红&#xff0c;牛海涛&#xff0c;史超&#xff0c;郭铖 郭永红&#xff0c;牛海涛&#xff0c;史超&#xff0c;郭铖&#xff0e;基于卷积和注意力机制的小样本目标检测 [J/OL]&#xff0e;兵工学报. https://…

k8s的error: metrics not available yet问题处理

kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求&#xff0c;需在k8s集群中使用 kubectl top node命令&#xff0c;但是一直报error: metrics not available yet错误。为了更好的复现问题&…

Maven:通过相对路径向jar中添加依赖项

问&#xff1a;我有一个专有的jar&#xff0c;我想把它作为一个依赖项添加到我的pom中。 但我不想把它添加到存储库中。原因是我希望常用的maven命令(如mvn compile等)能够开箱即用。(无需要求开发人员自己将其添加到某个存储库中)。 我希望jar在源代码控制中的第三方库中&…

代码安全之代码混淆及加固(Android)

​ 目录 代码安全之代码混淆及加固&#xff08;Android&#xff09;&#x1f512; 摘要 引言 正文 代码混淆 代码加固 总结 参考资料 摘要 本文将介绍如何通过代码混淆和加固来保护Android应用的代码安全性。代码混淆是将代码进行加密&#xff0c;使其难以被反编译获得…

TikTok:传承文化多样性,扬播全球声音

在数字时代&#xff0c;社交媒体平台已经成为了传播文化多样性和全球声音的重要渠道。其中&#xff0c;TikTok无疑是最引人注目的之一。 这个短视频应用在短短几年内迅速崭露头角&#xff0c;吸引了全球数亿用户&#xff0c;成为一个独特的文化传媒工具&#xff0c;通过短视频…

2013年11月10日 Go生态洞察:Go语言四周年回顾

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

AR贴纸特效SDK,无缝贴合的虚拟体验

增强现实&#xff08;AR&#xff09;技术已经成为了企业和个人开发者的新宠。它通过将虚拟元素与现实世界相结合&#xff0c;为用户提供了一种全新的交互体验。然而&#xff0c;如何将AR贴纸完美贴合在人脸的面部&#xff0c;同时支持多张人脸的检测和标点及特效添加&#xff0…

一本了解生成式人工智能

上周&#xff0c;发了一篇关于大语言模型图数据库技术相结合的文章&#xff0c;引起了很多朋友的兴趣。当然了&#xff0c;这项技术本身就让俺们很兴奋&#xff0c;比如我就是从事图研发的&#xff0c;当然会非常关注它在图领域的应用与相互促就啦。 纵观人类文明历史&#xff…