C++实现图片格式转换

系列文章目录

C++实现爬虫!
C++宽窄字符转化与输出!
C++文件读写(最全方法)
C++实现窗口截图


前言

C++如果本身想要实现图片格式的转化,是比较困难的

但在VS中,想要做到这一点就非常简单了,因为VS的C++开发环境中,自带ATL模板库

其中,模板库atlimage.h,有很多实用的方法可以对图片进行操作

比如该库内就有一个Cimage类可用于实现图片格式转换,不清楚的可以查看C++实现窗口截图一文,其简单的使用到了该类以及对该类进行了简单介绍

一、主要流程

  1. 建立CImage类对象
  2. 调用Load方法加载需要进行转化的图片
  3. 调用save方法保存为想要转换的格式

是不是很简单!让我们直接上代码

二、代码

#include<string>
#include<atlimage.h>
using namespace std;
//oldPic:要转换的图片名称
//newPic:转换后保存的图片名称
bool Convert(const std::wstring& oldPic, const std::wstring& newPic)
{
	CImage image; //创建Cimage对象
	image.Load(oldPic.data()); //加载要转换的图片
	HRESULT hRes = image.Save(newPic.data(), Gdiplus::ImageFormatBMP); //转换为指定的格式,可指定其它格式
	image.ReleaseDC(); //释放DC
	if (hRes != S_OK) return false;
	return true;
}
int main() {
	Convert(L"1.png",L"1.bmp");
} 

这里写了一个函数,相信大家应该都能看得懂,传入的两个参数分别为要进行转化的图片,以及转化后保存的图片名称

不过我这里使用的都是宽字符wstring,所以使用的时候,你必须向这样写L"",即字符串前面添加L,才代表着宽字符

函数里面的逻辑也不难,分别按三个步骤走就是了,只是调用save函数的第二个参数,可能有点繁琐,我直接将所有的格式都放在下面了,可以直接复制即可

可转换的图片格式参数:

Gdiplus::ImageFormatUndefined
Gdiplus::ImageFormatMemoryBMP 
Gdiplus::ImageFormatBMP
Gdiplus::ImageFormatEMF 
Gdiplus::ImageFormatWMF 
Gdiplus::ImageFormatJPEG 
Gdiplus::ImageFormatPNG 
Gdiplus::ImageFormatGIF 
Gdiplus::ImageFormatTIFF 
Gdiplus::ImageFormatEXIF 
Gdiplus::ImageFormatIcon 
Gdiplus::ImageFormatHEIF
Gdiplus::ImageFormatWEBP

可根据后缀名确定要转换的格式


版权声明:本文为weixin_50964512原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。