我想请问,要如何保存下面程序所提取的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.
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.
解决方案 »
- 系统操作日志如何实现
- 一个关于d6中打开form窗口的问题
- 我安装了DELPHI7.0,但在VCL找不到QREPORT这页了。怎样把QREPORT组件加进来?
- FastReport報表如何在後面再打印幾行空行,即只打印空表格線?
- 我在主窗口的OnShow函数里面建立了一个登录窗口,要求用户输入密码,错误的话终止程序,可是我用halt终止的时候程序出错,说"can't chang
- 请教 StringReplace('ABCDE','AB','12',RfReplaceAll) 哪里不正确
- 请多多关照
- 简单问题,高分求救
- hi 有人在线吗?请教时间问题
- 请问:如何彻底删除Delphi中安装的第三方控件?
- 100分,如何把一个adoquery中的数据存放到数据库中?
- 如何将edit中两个内容代入sql语句的问题还是没有解决
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;