您的位置:程序门 -> vc/mfc -> 图形处理/算法



谁给俺介绍一个免费的gif编码库?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


谁给俺介绍一个免费的gif编码库?[已结贴,结贴人:jun_01]
发表于:2007-10-22 18:32:45 楼主
如果是cpp、h的源代码最好。

如果没有,lib、dll也行。

要支持生成多帧gif的。
发表于:2007-10-22 21:13:081楼 得分:5
gdi+,cximage,freeimage,都能读gif的
发表于:2007-10-23 08:33:082楼 得分:0
读很简单,关键是生成多帧gif!
发表于:2007-10-23 08:33:533楼 得分:15
cximage  
发表于:2007-11-09 16:47:174楼 得分:30
没处理多多帧的,
不过帮你找了一个


---------------------------------------------------------------  

用gdi+的creating   and   saving   a   multiple-frame   image  
---------------------------------------------------------------  

下载这个库  
http://www.vchelp.net/vchelp/file2002_4/flib.asp?type_id=18&class_id=1&cata_id=12&article_id=907  

fcimage类里面有下面几个成员函数能够完成你的功能:  

函数原型:   bool loadgif (pctstr   resname,   pctstr   restype)  
bool loadgif (pctstr   szfilename)    
说明:   从说明或文件中读入第一帧。    
函数原型:   bool loadgifframe (int   inumber)  
int    loadgifnextframe ()    
说明:   inumber   :[1..wtotalframe]  

此两函数调用前,必须先调用loadgif   。    
函数原型:   bool savegif   (pctstr szfilename,  
          bool  bgolpal   =   true)  
bool addgifframe   (pctstr szfilename,  
            bool  bgolpal   =   false,  
            dword    dwdelay   =   100,  
            dword    dwtransindex   =   -1)    
说明:   bgolpal   :是否使用此帧调色板作为全局调色板。  

dwdelay   :为两帧间延时毫秒数。  

dwtransindex   :为透明色索引,-1表示无透明色   。    

---------------------------------------------------------------  

#include   <windows.h>  
#include   <gdiplus.h>  
#include   <stdio.h>  
using   namespace   gdiplus;  

int   getencoderclsid(const   wchar*   format,   clsid*   pclsid);     //   helper   function  

int   main()  
{  
      //   initialize   gdi+.  
      gdiplusstartupinput   gdiplusstartupinput;  
      ulong_ptr   gdiplustoken;  
      gdiplusstartup(&gdiplustoken,   &gdiplusstartupinput,   null);  

      encoderparameters   encoderparameters;  
      ulong                           parametervalue;  
      status                         stat;  

      //   an   encoderparameters   object   has   an   array   of  
      //   encoderparameter   objects.   in   this   case,   there   is   only  
      //   one   encoderparameter   object   in   the   array.  
      encoderparameters.count   =   1;  

      //   initialize   the   one   encoderparameter   object.  
      encoderparameters.parameter[0].guid   =   encodersaveflag;  
      encoderparameters.parameter[0].type   =   encoderparametervaluetypelong;  
      encoderparameters.parameter[0].numberofvalues   =   1;  
      encoderparameters.parameter[0].value   =   ?metervalue;  

      //   get   the   clsid   of   the   tiff   encoder.  
      clsid   encoderclsid;  
      getencoderclsid(l"image/tiff",   &encoderclsid);  

      //   create   four   image   objects.  
      image*   multi   =   new   image(l"shapes.bmp");  
      image*   page2   =   new   image(l"cereal.gif");  
      image*   page3   =   new   image(l"iron.jpg");  
      image*   page4   =   new   image(l"house.png");  

      //   save   the   first   page   (frame).  
      parametervalue   =   encodervaluemultiframe;  
      stat   =   multi-> save(l"multiframe.tif",   &encoderclsid,   &encoderparameters);  
      if(stat   ==   ok)  
            printf("page   1   saved   successfully.\n");  

      //   save   the   second   page   (frame).  
      parametervalue   =   encodervalueframedimensionpage;  
      stat   =   multi-> saveadd(page2,   &encoderparameters);  
      if(stat   ==   ok)  
            printf("page   2   saved   successfully.\n");  

      //   save   the   third   page   (frame).  
      parametervalue   =   encodervalueframedimensionpage;  
      stat   =   multi-> saveadd(page3,   &encoderparameters);  
      if(stat   ==   ok)  
            printf("page   3   saved   successfully.\n");  

      //   save   the   fourth   page   (frame).  
      parametervalue   =   encodervalueframedimensionpage;  
      stat   =   multi-> saveadd(page4,   &encoderparameters);  
      if(stat   ==   ok)  
            printf("page   4   saved   successfully.\n");  

      //   close   the   multiframe   file.  
      parametervalue   =   encodervalueflush;  
      stat   =   multi-> saveadd(&encoderparameters);  
      if(stat   ==   ok)  
            printf("file   closed   successfully.\n");  

      delete   multi;  
      delete   page2;  
      delete   page3;  
      delete   page4;  
      gdiplusshutdown(gdiplustoken);  
      return   0;  

---------------------------------------------------------------  

这有一个非常好的,而且有说明:  

http://www.codeproject.com/bitmap/cximage.asp  

先免费注册个id,然后登陆下载。  


快速检索

最新资讯
热门点击