我想请问,要如何保存下面程序所提取的GIF图片啊?
unit gif;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
uses GDIPOBJ, GDIPAPI;var
  img: TGPImage;
  GifFrame, GifFrameCount: Word;
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenDialog1.Filter := 'GIF 文件|*.gif';//用于打开GIF文件
  img := TGPImage.Create;//分配img的内存空间,建立新的对象end;procedure TForm1.FormDestroy(Sender: TObject);
begin
img.Free; //释放空间
end;procedure TForm1.Button1Click(Sender: TObject);
var
  DimensionsCount: Integer;
  DimensionsIDs: PGUID;
  i: Integer;
type
  ArrDimensions = array of TGUID;
begin
  if not OpenDialog1.Execute then Exit;//打开外部存在的文件
  img.Free;
  img := TGPImage.Create(OpenDialog1.FileName);  {获取 Gif 总帧数}
  DimensionsCount := img.GetFrameDimensionsCount;
  //得到Image对象的Dimensions数,每个Dimension通过一个GUID标示
  GetMem(DimensionsIDs, DimensionsCount * SizeOf(TGUID));
  //给DimensionsIDs分配空间
  img.GetFrameDimensionsList(DimensionsIDs, DimensionsCount);
  //函数GetFrameDimensionsList可以返回所有Dimension的GUID值,
  //第一个GUID值保存在函数参数ArrDimensionsIDs数组的索引0处
  GifFrameCount := img.GetFrameCount(ArrDimensions(DimensionsIDs)[0]);
  //得到 DimensionsIDs里有多少个的GifFrame
  FreeMem(DimensionsIDs);  Text := Format('共有 %d 帧', [GifFrameCount]);  {显示帧列表}
  ListBox1.Clear;
  for i := 1 to GifFrameCount do
    ListBox1.Items.Add(Format('第 %d 帧', [i]));  Repaint;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;begin
  g := TGPGraphics.Create(Canvas.Handle);
  g.DrawImage(img, ListBox1.Width + 100, 100, img.GetWidth, img.GetHeight);
  //距离ListBox1、窗体的顶的距离,及图片的的宽,高
  g.Free;end;procedure TForm1.ListBox1Click(Sender: TObject);
begin
GifFrame := ListBox1.ItemIndex;
  img.SelectActiveFrame(FrameDimensionTime, GifFrame);
  Repaint;end;end.

解决方案 »

  1.   

    你要保存的每一帧图片时什么格式的? GIF的?
      

  2.   

    这是保存BMP的 你如果要GIF格式的 我再写给你procedure TForm1.ListBox1Click(Sender: TObject); 
    var 
    i:integer; 
    ImgGUID: TGUID; 
    begin  
    //你可以在这里对Listbox1进行循环 获取每一帧的图片 
    for i:=0 to ListBox1.Items.Count-1 do 
     begin 
     //GifFrame := ListBox1.ItemIndex; 
    //img.SelectActiveFrame(FrameDimensionTime, GifFrame); 
     img.SelectActiveFrame(FrameDimensionTime, i); 
     GetEncoderClsid('image/bmp', ImgGUID); 
     img.Save('c:\test'+inttostr(i)+'.bmp',ImgGUID); //Repaint;
     end; 
    end;