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

C++ Builder 的 TGIFImage 类所在的头文件:

类/模板 描述 头文件 (XE2 之后) 头文件 (XE 之前)
TGIFImage .gif 图片/动画 #include <Vcl.Imaging.GIFImg.hpp> #include <GIFImg.hpp>

 

相关链接:

TGIFImage, TImage

 

通过 TImage 加载并且显示 gif 动画

默认情况,TImage 加载的 gif 只显示第一帧画面,需要写程序设定 gif 显示动画和动画的速度:

// Image1 为从控件面板选取并且放在 Form 上的 TImage 控件
// 可以在设计时从 Image1 的 Picture 属性里面加载 gif 图片,也可以用程序代码加载图片
Image1->Picture->LoadFromFile(L"D:\\1.gif"); // 加载 gif 图片文件
TGIFImage *lpGif = dynamic_cast<TGIFImage*>(Image1->Picture->Graphic);
if(lpGif) // 如果加载的图片是 gif 图片
{
  lpGif->AnimationSpeed = 100; // 动画的速度为 100%
  lpGif->Animate = true; // 执行动画
}

通过 AnimationSpeed 属性设定动画的速度 (%),范围是 0 ~ 1000,数值越大速度越快,100 是正常速度 (100%)。
通过 Animate 属性运行或停止动画,true 为运行,false 为停止动画。

 

把 gif 动画加载到 TGIFImage,然后通过 TImage 显示出来

TGIFImage *gif = new TGIFImage;
try
{
  gif->LoadFromFile(L"D:\\1.gif");
  gif->AnimationSpeed = 100; // 动画速度 100%
  gif->Animate = true; // 执行动画
  Image1->Picture->Assign(gif);
}
__finally
{
  delete gif;
}

通过 AnimationSpeed 属性设定动画的速度 (%),范围是 0 ~ 1000,数值越大速度越快,100 是正常速度 (100%)。
通过 Animate 属性运行或停止动画,true 为运行,false 为停止动画。

 

直接在画布上输出 TGIFImage 加载的 gif 动画

利用 TGIFImage 的 OnChange 事件刷新显示,会自动循环播放 gif 动画的每一帧,并且也会正确的控制每一帧的显示时间。

在 .h 文件里面,在 Form 的 private: 里面加入声明 GIFImage1 指针和 GifChange 作为 GIFImage1 刷新显示事件的函数。
在 Form 上放一个 TButton 按钮 Button1,在这个按钮的 OnClick 点击事件 Button1Click 里面写加载 gif 动画,
在 Form 上放一个 TPaintBox 控件 PaintBox1,在这个控件的 OnPaint 事件 PaintBox1Paint 写通过画布显示输出 gif 动画:

在 .h 文件里面添加的内容
private: // User declarations
  TGIFImage *GIFImage1;
  void __fastcall GifChange(System::TObject* Sender);

在 .cpp 文件里面,加入初始化 GIFImage1 和 GifChange 事件函数。

在 .cpp 文件里面添加的内容
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
  GIFImage1 = NULL; // 初始化为 NULL 指针
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
  delete GIFImage1; // 退出时释放占用的资源
  GIFImage1 = NULL; // 清为 NULL 指针
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!GIFImage1) // 如果是 NULL 就需要创建出来
    GIFImage1 = new TGIFImage;
  // Copyright © Victor Chen, http://www.cppfans.com/
  GIFImage1->LoadFromFile(L"D:\\1.gif"); // 加载 gif 动画图片
  GIFImage1->Animate = true; // 执行动画
  GIFImage1->AnimationSpeed = 100; // 动画的速度为 100% (范围 0% ~ 1000%)
  GIFImage1->OnChange = GifChange; // 刷新显示的事件函数
  PaintBox1->Invalidate(); // 刷新显示
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GifChange(System::TObject* Sender)
{
  PaintBox1->Invalidate(); // 刷新显示
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
  PaintBox1->Canvas->Draw(0,0,GIFImage1); // 显示 gif 动画
}
//---------------------------------------------------------------------------
下一页:bmp 转 gif 图片和动画

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