C++之对FreeImage的简单使用

FreeImage的简单使用

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<array>
#include<string>
#include <vector>
#include <ctime>
using namespace  std;
#include "FreeImage.h"
#pragma comment(lib,"FreeImage.lib")


/*
int FreeImageMain::GetImagePathSuffix(QString path) const
{
//    QString::compare(path.split(".").constLast(), "BMP", Qt::CaseInsensitive);
QString Suffix = path.split(".").constLast().toUpper();
if(Suffix == "BMP")
{
return FIF_BMP;
}
else if (Suffix == "ICO")
{
return FIF_ICO;
}
else if (Suffix == "JPEG")
{
return FIF_JPEG;
}
else if (Suffix == "JNG")
{
return FIF_JNG;
}
else if (Suffix == "KOALA")
{
return FIF_KOALA;
}
else if (Suffix == "LBM")
{
return FIF_LBM;
}
else if (Suffix == "IFF")
{
return FIF_IFF;
}
else if (Suffix == "MNG")
{
return FIF_MNG;
}
else if (Suffix == "PBM")
{
return FIF_PBM;
}
else if (Suffix == "PBMRAW")
{
return FIF_PBMRAW;
}
else if (Suffix == "PCD")
{
return FIF_PCD;
}
else if (Suffix == "PCX")
{
return FIF_PCX;
}
else if (Suffix == "PGM")
{
return FIF_PGM;
}
else if (Suffix == "PGMRAW")
{
return FIF_PGMRAW;
}
else if (Suffix == "PNG")
{
return FIF_PNG;
}
else if (Suffix == "PPM")
{
return FIF_LBM;
}
else if (Suffix == "PPMRAW")
{
return FIF_PPMRAW;
}
else if (Suffix == "RAS")
{
return FIF_RAS;
}
else if (Suffix == "TARGA")
{
return FIF_TARGA;
}
else if (Suffix == "TIFF")
{
return FIF_TIFF;
}
else if (Suffix == "WBMP")
{
return FIF_WBMP;
}
else if (Suffix == "PSD")
{
return FIF_PSD;
}
else if (Suffix == "CUT")
{
return FIF_CUT;
}
else if (Suffix == "XBM")
{
return FIF_XBM;
}
else if (Suffix == "XPM")
{
return FIF_XPM;
}
else if (Suffix == "DDS")
{
return FIF_DDS;
}
else if (Suffix == "GIF")
{
return FIF_GIF;
}
else if (Suffix == "HDR")
{
return FIF_HDR;
}
else if (Suffix == "FAXG3")
{
return FIF_FAXG3;
}
else if (Suffix == "SGI")
{
return FIF_SGI;
}
else if (Suffix == "EXR")
{
return FIF_EXR;
}
else if (Suffix == "J2K")
{
return FIF_J2K;
}
else if (Suffix == "JP2")
{
return FIF_JP2;
}
else if (Suffix == "PFM")
{
return FIF_PFM;
}
else if (Suffix == "PICT")
{
return FIF_PICT;
}
else if (Suffix == "RAW")
{
return FIF_RAW;
}
else if (Suffix == "WEBP")
{
return FIF_WEBP;
}
else if (Suffix == "JXR")
{
return FIF_JXR;
}
return FIF_UNKNOWN;

}





*/
void main()
{
	
	//1.初始化
	FreeImage_Initialise(TRUE);

	
	FIBITMAP * JPEG = FreeImage_Load(FIF_JPEG, "C:\\Users\\Microsoft\\Desktop\\IMG_0011.JPG", JPEG_DEFAULT);
	
	//获取影像的宽高,都以像素为单位
	int Width = FreeImage_GetWidth(JPEG);
	int Height = FreeImage_GetHeight(JPEG);
	std::cout << "Width: " << Width << "\nHeight: " << Height << std::endl;

	//旋转
	FIBITMAP *JPEG1 = FreeImage_RotateEx(JPEG,90 , 0, 0, Width/2, Height/2, TRUE);

	//另存为,在这里保存为jp2,FIF
	if (FreeImage_Save(FIF_JP2, JPEG1, "C:\\Users\\Microsoft\\Desktop\\ty9.jp2"))
	{
		cout << "转换成功\n";
	}
	else
	{
		cout << "转换失败\n";
	}

	
	FreeImage_Unload(JPEG);
	FreeImage_Unload(JPEG1);
	FreeImage_DeInitialise();

	system("pause");
}

结果:
在这里插入图片描述
在这里插入图片描述
下载FreeImage库

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FreeImage是一个开源的图像处理库,支持多种图像格式的读取、处理和输出。如果想要使用FreeImage库来缩放GIF图片,可以按照以下步骤操作: 1.加载GIF图片 使用FreeImage_LoadMultiBitmapFromHandle函数加载GIF文件,并获取GIF文件中所有的帧信息,如下所示: ```c++ FIMULTIBITMAP* pMultiBitmap = FreeImage_LoadMultiBitmapFromHandle(FIF_GIF, hMem, GIF_PLAYBACK); ``` 在上述代码中,hMem是指向GIF文件内存块的指针,GIF_PLAYBACK是指定GIF文件的播放方式(循环或单次)。 2.缩放GIF图片 使用FreeImage_Rescale函数对GIF文件中的每帧进行缩放,如下所示: ```c++ for (int i = 0; i < FreeImage_GetPageCount(pMultiBitmap); i++) { FIBITMAP* pBitmap = FreeImage_LockPage(pMultiBitmap, i); FIBITMAP* pScaledBitmap = FreeImage_Rescale(pBitmap, newWidth, newHeight, FILTER_BICUBIC); FreeImage_UnlockPage(pMultiBitmap, pBitmap, FALSE); FreeImage_Unload(pBitmap); FreeImage_Save(FIF_GIF, pScaledBitmap, "output.gif", GIF_PLAYBACK); FreeImage_Unload(pScaledBitmap); } ``` 在上述代码中,newWidth和newHeight分别代表缩放后的宽度和高度,FILTER_BICUBIC表示使用Bicubic滤波器进行缩放。 3.保存GIF图片 使用FreeImage_Save函数将缩放后的GIF文件保存到磁盘中,如下所示: ```c++ FreeImage_Save(FIF_GIF, pMultiBitmap, "output.gif", GIF_PLAYBACK); ``` 在上述代码中,pMultiBitmap是指向GIF文件的指针。 完整的代码示例: ```c++ #include <iostream> #include "FreeImage.h" int main() { // 加载GIF图片 FILE* fp = fopen("input.gif", "rb"); fseek(fp, 0, SEEK_END); long lSize = ftell(fp); rewind(fp); BYTE* pBuffer = new BYTE[lSize]; fread(pBuffer, lSize, 1, fp); fclose(fp); FIMEMORY* hMem = FreeImage_OpenMemory(pBuffer, lSize); FIMULTIBITMAP* pMultiBitmap = FreeImage_LoadMultiBitmapFromHandle(FIF_GIF, hMem, GIF_PLAYBACK); // 缩放GIF图片 int newWidth = 200; int newHeight = 200; for (int i = 0; i < FreeImage_GetPageCount(pMultiBitmap); i++) { FIBITMAP* pBitmap = FreeImage_LockPage(pMultiBitmap, i); FIBITMAP* pScaledBitmap = FreeImage_Rescale(pBitmap, newWidth, newHeight, FILTER_BICUBIC); FreeImage_UnlockPage(pMultiBitmap, pBitmap, FALSE); FreeImage_Unload(pBitmap); FreeImage_Save(FIF_GIF, pScaledBitmap, "output.gif", GIF_PLAYBACK); FreeImage_Unload(pScaledBitmap); } // 保存GIF图片 FreeImage_Save(FIF_GIF, pMultiBitmap, "output.gif", GIF_PLAYBACK); // 释放内存 FreeImage_CloseMemory(hMem); delete[] pBuffer; FreeImage_CloseMultiBitmap(pMultiBitmap); return 0; } ``` 需要注意的是,使用FreeImage库需要在系统中预先安装,并在C++项目中添加FreeImage.h和FreeImage.lib文件。此外,FreeImage库支持的图像格式较多,可根据需要选择合适的图像格式进行缩放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值