主页C++ Builder 资料C++ Builder 编程技巧图片处理gif 的每一帧都提取出来
C++ Builder 串口控件
C++ Builder 编程技巧
字符串及文字处理
多媒体处理
图片处理
 • 显示 gif 图片和动画
 • bmp 转 gif 图片和动画
 • gif 的每一帧都提取出来
 • jpg,gif,png,bmp之间转换
 • 屏幕截图
 • 生成二维码
 • 识别二维码和条码
文件处理
界面处理
C++ Builder 操作指南
C++ Builder 参考手册
网友留言/技术支持
把 gif 的每一帧都提取出来,每一帧转为一个 bmp 图片

本文内容用到的头文件

类/模板 描述 头文件 (XE2 之后) 头文件 (XE 之前)
TGIFImage .gif 图片/动画 #include <Vcl.Imaging.GIFImg.hpp> #include <GIFImg.hpp>
TBitmap .bmp 图片/位图 #include <Vcl.Graphics.hpp> #include <Graphics.hpp>
std::auto_ptr 自动指针 #include <memory> #include <memory>

 

提取 gif 每一帧到 bmp 图片的示例程序:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  std::auto_ptr<TBitmap>bmp(new TBitmap);
  std::auto_ptr<TGIFImage>gif(new TGIFImage);
  gif->LoadFromFile(L"D:\\1.gif");                         // 加载 gif 动画
  // Copyright © Victor Chen, http://www.cppfans.com/
  for(int i=0; i<gif->Images->Count; i++)                  // 一共有 gif->Images->Count 帧
   {
     TGIFFrame *lpFrame = gif->Images->Frames[i];          // 第 i 帧
     if(i==0)
       bmp->Assign(lpFrame);                               // 第一帧是完整的图片
     else                                                  // 之后的帧需要画在前一帧上才是完整的图片
       lpFrame->Draw(bmp->Canvas, TRect(0,0,bmp->Width,bmp->Height), true, true);
     bmp->SaveToFile(String().sprintf(L"d:\\%02d.bmp",i)); // 第 i 帧存为第 i 个 bmp 文件
   }
}
◤上一页:bmp 转 gif 图片和动画下一页:jpg,gif,png,bmp之间转换

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号