利用CxImage实现编解码Gif图像代码举例
来源:互联网 发布:ipv6网络电视 编辑:程序博客网 时间:2024/06/05 09:10
Gif(GraphicsInterchange Format,图形交换格式)是由CompuServe公司在1987年开发的图像文件格式,分为87a和89a两种版本。Gif是基于LZW算法的无损压缩算法。Gif图像是基于颜色表的,最多只支持8位(256色)。Gif减少了图像调色板中的色彩数量,从而在存储时达到减少图像文件大小的目的。Gif分为静态Gif和动画Gif两种,扩展名为.gif,是一种压缩位图格式,支持透明背景图像,适用于多种操作系统。
下面利用CxImage开源库,实现对Gif图像进行编解码,主要包括3个文件:
1. funset.h :
#ifndef _FUNSET_H_#define _FUNSET_H_#include <string>using namespace std;void decoding_gif(string strGifName, string strSavePath);void encoding_gif(string strImgPath, string strGifName);#endif //_FUNSET_H_
2. funset.cpp:
#include "stdafx.h"#include "funset.h"#include <iostream>#include "../CxImage/ximagif.h"#include <io.h>using namespace std;void decoding_gif(string strGifName, string strSavePath){CxImage img;img.Load(strGifName.c_str(), CXIMAGE_FORMAT_GIF);int iNumFrames = img.GetNumFrames();cout<<"frames num = "<<iNumFrames<<endl;CxImage* newImage = new CxImage();for (int i = 0; i < iNumFrames; i++) {newImage->SetFrame(i);newImage->Load(strGifName.c_str(), CXIMAGE_FORMAT_GIF);char tmp[64];sprintf(tmp, "%d", i);string tmp1;tmp1 = tmp1.insert(0, tmp);tmp1 = strSavePath + tmp1 + ".png";newImage->Save(tmp1.c_str(), CXIMAGE_FORMAT_PNG);}if (newImage) delete newImage;}int TraverseFolder(const string strFilePath, string strImageNameSets[]){int iImageCount=0;_finddata_t fileInfo;long handle = _findfirst(strFilePath.c_str(), &fileInfo);if (handle == -1L) {cerr << "failed to transfer files" << endl;return -1;}do {//cout << fileInfo.name <<endl;strImageNameSets[iImageCount] = (string)fileInfo.name;iImageCount ++;} while (_findnext(handle, &fileInfo) == 0);return iImageCount;}void encoding_gif(string strImgPath, string strGifName){string strImgSets[100] = {};int iImgCount = TraverseFolder(strImgPath, strImgSets);string strTmp = strImgPath.substr(0, strImgPath.find_last_of("/") +1);CxImage** img = new CxImage*[iImgCount];if (img == NULL) {cout<<"new Cximage error!"<<endl;return;}for (int i = 0; i < iImgCount; i++) {string tmp1;tmp1 = strTmp + strImgSets[i];img[i] = new CxImage;img[i]->Load(tmp1.c_str(), CXIMAGE_FORMAT_PNG);}CxIOFile hFile;hFile.Open(strGifName.c_str(), "wb");CxImageGIF multiimage;multiimage.SetLoops(3);multiimage.SetDisposalMethod(2);multiimage.Encode(&hFile, img, iImgCount, false, false);hFile.Close();delete [] img;}3. main.cpp:
#include "stdafx.h"#include <iostream>#include "funset.h"using namespace std;int main(int argc, char* argv[]){string strGifName = "../../Data/fire.gif";string strSavaPath = "../../Data/";decoding_gif(strGifName, strSavaPath);string strImgPath = "../../Data/*.png";strGifName = "../../Data/tmp.gif";encoding_gif(strImgPath, strGifName);cout<<"ok!!!"<<endl;return 0;}
利用CxImage实现起来简单吧!!!^_^
GitHub:https://github.com/fengbingchun/CxImage_Test
0 0
- 利用CxImage实现编解码Gif图像代码举例
- Base64编解码代码(CXImage 类处理)
- gif编解码原理
- JPEG图像编解码
- 利用GDI+实现gif图像背景透明
- Android 解码播放GIF图像
- 基于ffmpeg 编解码 GIF 【PC】【Android】
- jpg图像的编解码
- WCF编解码实现
- Base64编、解码原理,及代码实现(一)
- Base64编、解码原理,及代码实现(二)
- base64编解码原理与C代码实现
- x264编解码代码分析
- Skia深入分析6——skia中图像编解码代码概述
- Skia深入分析6——skia中图像编解码代码概述
- 图像解码之三——giflib解码gif图片
- 图像解码之三:giflib解码gif图片
- 图像解码之三:giflib解码gif图片
- hdu 3507(斜率优化)
- 【Servlet笔记】两种输出流以及乱码问题
- Foundation框架: 8.OC中的集合类之三 - NSDictionary的基本认识
- 关于 char wchar_t TCHAR LPCSTR LPCTSTR....(很基础,给自己做个总结)
- Oracle RAC+DG主库其中一个节点RESOLVABLE GAP
- 利用CxImage实现编解码Gif图像代码举例
- 打开文件时为什么要用二进制模式
- LA 6529 Eleven dp
- ios 制作自已的framework
- Swift笔记
- Pat 1040
- DOM对象和JQuery对象的区别
- 【设计模式学习笔记十七】【行为模式】【迭代器模式(Interpreter)】
- 类似支付宝的6个密码输入框