|
把 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 文件
}
}
|
|
|
|
|