代码文件:
unit Unit1;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
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);
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'; img := TGPImage.Create;
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; GetMem(DimensionsIDs, DimensionsCount * SizeOf(TGUID)); img.GetFrameDimensionsList(DimensionsIDs, DimensionsCount); GifFrameCount := img.GetFrameCount(ArrDimensions(DimensionsIDs)[
0]); 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 +
10,
10, img.GetWidth, img.GetHeight); g.Free;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin GifFrame := ListBox1.ItemIndex; img.SelectActiveFrame(FrameDimensionTime, GifFrame); Repaint;
end;
end.