本例效果图:
代码文件:
代码文件:
unit Unit1; interface uses 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.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 206 ClientWidth = 339 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate OnDestroy = FormDestroy OnPaint = FormPaint PixelsPerInch = 96 TextHeight = 13 object ListBox1: TListBox Left = 0 Top = 0 Width = 89 Height = 206 Align = alLeft ItemHeight = 13 TabOrder = 0 OnClick = ListBox1Click end object Button1: TButton Left = 256 Top = 173 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 1 OnClick = Button1Click end object OpenDialog1: TOpenDialog Left = 160 Top = 104 end end