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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCD1602命令代码整合

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

使用Kohya_ss训练Stable Diffusion Lora

Stable Diffusion模型微调方法 Stable Diffusion主要有 4 种方式&#xff1a;Dreambooth, LoRA, Textual Inversion, Hypernetworks。 Textual Inversion &#xff08;也称为 Embedding&#xff09;&#xff0c;它实际上并没有修改原始的 Diffusion 模型&#xff0c; 而是通过…

day18_多线程

今日内容 零、 复习昨日 一、作业 二、线程安全的集合 三、死锁 四、线程通信 五、线程池 零、 复习昨日 见晨考 一、线程安全[重点] 1.0 线程不安全 当前线程的数据被其他线程修改 1.1 线程安全 临界资源&#xff1a;共享资源(同⼀个对象)&#xff0c;一次只可以有一个线程操…

数字化时代,VR虚拟展厅为企业带来全新商机

临近年关&#xff0c;各个行业都想在年关将至之时冲一波销量&#xff0c;各种婚博会、家博会、车展会多不胜数。但是线下展会终归是场地有限&#xff0c;因此为了扩大受众范围&#xff0c;同时节约一定宣传成本&#xff0c;实现全球范围的展示和推广&#xff0c;不少企业都会选…

python基础练习题库实验八

文章目录 前言题目1代码 题目2代码 题目3代码 总结 前言 &#x1f388;关于python小题库的这模块我已经两年半左右没有更新了&#xff0c;主要是在实习跟考研&#xff0c;目前已经上岸武汉某211计算机&#xff0c;目前重新学习这门课程&#xff0c;也做了一些新的题目 &#x…

【星海出品】SDN neutron (五) openvswitch

1、ovs-vswitchd组件是交换机的主要模块&#xff0c;运行在用户态&#xff0c;其主要负责基本的转发逻辑、地址学习、外部物理端口绑定等。还可以运用OVS自带的ovs-ofctl工具采用openflow协议对交换机进行远程配置和管理。 2、ovsdb-server组件是存储OVS的网桥等配置、日志以及…

Flume(一)【Flume 概述】

前言 今天实在不知道学点什么好了&#xff0c;早上学了3个多小时的 Flink &#xff0c;整天只学一门技术是很容易丧失兴趣的。那就学点新的东西 Flume&#xff0c;虽然 Kafka 还没学完&#xff0c;但是大数据生态圈的基础组件也基本就剩这倆了。 Flume 概述 生产环境中的数据一…

基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 训练集图片处理1&#xff09;数据加载2&#xff09;图像处理 2. 测试图片处理1&#xff09;图像读取2&#xff09;图像处理 相关其它博客工程源代码下载其它资料下载 前言 本项目基于从网络获取的多种银行卡数据…

半平面求交 - 洛谷 - P3194 [HNOI2008] 水平可见直线

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 往期相关背景点击前往 题目大意 题目链接 https://www.luogu.com.cn/problem/P3194 在直角坐标系中给定一些直线&#xff0c;然后从Y轴无穷大处往0处看&#xff0c;…

iis特殊字符的轉義問題解決

今天發現有個問題&#xff0c;部分圖片的靜態資源帶有號&#xff0c;導致無法直接在瀏覽器獲取圖片&#xff0c;百度了一下&#xff0c;修改了注冊表&#xff0c;發現沒什麽軟用&#xff0c;最後找到一篇博客&#xff0c;解決了 解決

WorkPlus私有化部署的即时通讯软件,企业内部沟通协作的利器

随着企业的成长和信息科技的进步&#xff0c;团队协作变得越来越关键。为了更好地促进团队之间的信息共享和沟通&#xff0c;企业内部对聊天软件的需求也在不断增加。 WorkPlus是一个支持海量用户和高并发的私有化部署即时通讯能力&#xff0c;支持纯内网&#xff0c;内外网混…

服务号转订阅号如何操作

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;一、文章推送的篇数不同服务号在文章的推送篇数上是有所限制的&#xff08;每月推4次&#xff09;订阅号则每天可推送一篇文章。二、定义不同服务号主要是为关注用户提供服务使用的&#xff1b;订阅…