全部交易,
我需要将动画gif格式图片解码为MFC2010中的一些位图文件。是否有任何库可以解码gif图片?我不能使用GDIPlus,因为该程序必须在Windows XP上运行。如果有人为我提供了一个库,Activex,dll或类似的东西,我很感激。
非常感谢, Shervin Zargham
答案 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。