如何解码MFC2010中的动画gif文件

时间:2013-04-30 12:37:13

标签: c++ image mfc

全部交易,

我需要将动画gif格式图片解码为MFC2010中的一些位图文件。是否有任何库可以解码gif图片?我不能使用GDIPlus,因为该程序必须在Windows XP上运行。如果有人为我提供了一个库,Activex,dll或类似的东西,我很感激。

非常感谢, Shervin Zargham

4 个答案:

答案 0 :(得分:3)

使用ImageMagick的C ++ API(Magick++)非常简单:

/* list of Image to store the GIF's frames */
std::vector<Magick::Image> imageList; 

/* read all the frames of the animated GIF */
Magick::readImages( &imageList, "animated.gif" );

/* optionnally coalesce the frame sequence depending on the expected result */
Magick::coalesceImages( &imageList, imageList.begin(), imageList.end());

/* store each frame in a separate BMP file */
for(unsigned int i = 0; i < imageList.size(); ++i) {
    std::stringstream ss;
    ss << "frame" << i << ".bmp";
    imageList[i].write(ss.str());
}

答案 1 :(得分:1)

WIC(包含在Vista中,适用于XP)提供CLSID_WICGifDecoder,一个COM组件。

答案 2 :(得分:1)

尝试使用ImageMagick的C ++ API(Magick ++),在VS210上测试:

#include <Magick++.h>
#include <string>
#include <iostream>
#include <list>

using namespace std;
using namespace Magick;

void kk(char * nombre, char *ext)
{
/* list of Image to store the GIF's frames */
std::list<Magick::Image> imageList; 
/* read all the frames of the animated GIF */
Magick::readImages(  &imageList, nombre );
/* compone las diferencias para obtener los cuadros reales */
Magick::coalesceImages(&imageList,imageList.begin( ),imageList.end( ));
/* store each frame in a separate BMP file */
 list <Magick::Image>::iterator it;
 int i=1;
 for ( it = imageList.begin( ); it != imageList.end( ); it++ , i++)
    {
    std::string name =  "frame" +  to_string((_Longlong)(i))  + ext ;
    it->write(name);
    }
}
int main( int /*argc*/, char ** argv)
{

  // Initialize ImageMagick install location for Windows
  InitializeMagick(*argv); 
  try {
    kk("luni0.gif", ".png"); // using  ".bmp", ".jpg", ".png", OK
    return 0;
  }
    catch( exception &error_ )
    {
      cout << "Caught exception: " << error_.what() << endl;
      return 1;
    }
  }

答案 3 :(得分:0)

已经很长时间了,但我记得曾经使用OleLoadPicture在旧版本的Windows上打开GIF和PNG文件,尽管文档似乎表明它仅适用于BMP,ICO和WMF。