代码文件:
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.
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.03266716003418 seconds