高手看过来~~,请问怎样将GIF动画的每一帧图像保存为一张图片呢?

yangyue2846464 2004-10-31 01:33:18
如题~~~,好像蛮麻烦的,请高手解答。
...全文
767 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyue2846464 2004-10-31
  • 打赏
  • 举报
回复
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;

DWORD WINAPI AniGifProc(LPVOID lpParameter)
{
ULONG_PTR GdippToken;
GdiplusStartupInput GdippStart;
GdiplusStartup(&GdippToken,&GdippStart,0);
Graphics graph(((CAniGifView*)lpParameter)->m_hWnd);

Bitmap bmp(L"h:\\temp\\caca.gif");
int w=bmp.GetWidth();
int h=bmp.GetHeight();

int FrameCount,FramePos,size,pause;
PropertyItem* pPropItem;
GUID pageGuid;
GUID* pDimID;
UINT count;

count=bmp.GetFrameDimensionsCount();
pDimID=new GUID[count];

bmp.GetFrameDimensionsList(pDimID,count);
FrameCount=bmp.GetFrameCount(&pDimID[0]);

size=bmp.GetPropertyItemSize(PropertyTagFrameDelay);
pPropItem=(PropertyItem*)malloc(size);

bmp.GetPropertyItem(PropertyTagFrameDelay,size,pPropItem);
delete[]pDimID;

pageGuid=FrameDimensionTime;
FramePos=0;
for(;;)
{
bmp.SelectActiveFrame(&pageGuid,FramePos);
/*
//这里可以保存每一帧
CLSID bmpClsid;
GetEncoderClsid(L"image/gif", &bmpClsid); //在MSDN里有
bmp.Save(L"zzbb.gif",&bmpClsid,0);
*/
graph.DrawImage(&bmp,10,10,w,h);

pause=((int*)pPropItem->value)[FramePos]*10;
Sleep(pause);

FramePos=(FramePos+1)%FrameCount;

}
free(pPropItem);

return(0);
}

void CAniGifView::OnMenuitem32771()
{ //开始
// TODO: Add your command handler code here
HANDLE hAniGif;
DWORD ThrdID;

hAniGif=CreateThread(0,0,AniGifProc,this,0,&ThrdID);
CloseHandle(hAniGif);
}

前面看到这个贴子,不过保存那里没看懂,大家教教,用GDI+实现的。
yangyue2846464 2004-10-31
  • 打赏
  • 举报
回复
由于特殊原因我就是须要把每一帧图像保存成图像文件,ipicture我看过,显示GIF动画可以,但是要保存每一帧的时候颜色值啊头文件啊不会指定。。。。
houdy 2004-10-31
  • 打赏
  • 举报
回复
还是用个库吧,现在这种开源的库很多,sf.net上很容易找到。我推荐imagemagick。
zzwu 2004-10-31
  • 打赏
  • 举报
回复
在网站

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=200709

的文章中,介绍了利用ipicture接口来逐帧显示GIF动画里的每一帧,我想可以有参考价值。
zzwu 2004-10-31
  • 打赏
  • 举报
回复
没有专门的库来支持,这样的工作不容易,单是为了显示就要几十万byte的代码。
yangyue2846464 2004-10-31
  • 打赏
  • 举报
回复
高手们都睡觉了啊~~哭死了,用GDI+好像可以吧~~
谁能把详细的代码贴上来?主要就是把GIF动画里的每一帧生成一张GIF图片存放到磁
盘里。。。,分不够再加。帮帮忙了。

4,449

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧