请问如何将下面两个程序连接起来?第一个程序是提取图片上任意多个的点的RGB,第二个是提取GIF动画(由多张图片组成的),得到GIF动画的全部图片。现在要将两个代码连接,使我在EDIT1和EDIT2里面分别输入X和Y坐标后可以得到GIF动画上该点的RGB。而得到的结果的[color=#800080]保存方式是都放在TXT文件里,且第一张的RGB在最上面(或者最前面,并且也是按输入点坐标的顺序保存),然后是第二张.....最后一张的RGB在最后面。[/color]由于第一个代码是输入一个点坐标,按次BUTTON才得到一个点,所以如果提取GIF动画也按该提取方式的话,要避免保存的方式变成是先得到第一个点的GIF上的全部RGB,然后是第二个点上GIF的全部RGB.
第一个代码:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm}
const BmpPath = 'C:\Temp\Test.bmp';
procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
clr: TColor;
X,Y:INTEGER;
pixels: TStrings;
begin
X:=STRTOINT(EDIT1.TEXT);
Y:=STRTOINT(EDIT2.TEXT);
bit := TBitmap.Create;
bit.LoadFromFile(BmpPath); {载入图片}
clr := bit.Canvas.Pixels[X,Y]; {获取第一像素的颜色值}
pixels:= TStringList.Create;
if FileExists('c:\temp.txt') then
pixels.LoadFromFile('c:\temp.txt');
pixels.Add(IntToHex(clr, 0));
pixels.SaveToFile('c:\temp.txt');
pixels.Free;
bit.Free; end; end.
第二个:
procedure TForm1.Button1Click(Sender: TObject);
var
I, Count: Integer;
Clsid: TClsid;
Parameters: TEncoderParameters;
Quality: Integer;
Image: TGpImage;
GUID: TGUID;
begin
// 打开图像文件
if opendialog1.execute then
Image := TGpImage.Create(opendialog1.filename);
try
// 获取图像所有帧维度的GUID,这里我们只取第一个
Image.GetFrameDimensionsList(@GUID, 1);
// 通过获取维度的GUID,取得图像的帧(页)数量
Count := Image.GetFrameCount(GUID);
// 下面设置自定义的编码参数,这里为1个参数
Parameters.Count := 1;
// 设置参数唯一标志的GUID,这里为编码品质
Parameters.Parameter[0].Guid := EncoderQuality;
// 设置参数值的数据类型为长整型
Parameters.Parameter[0].ValueType := EncoderParameterValueTypeLong;
Parameters.Parameter[0].NumberOfValues := 1;
// 设置参数的值:品质等级,最高为100,图像文件大小与品质成正比
Quality := 100;
Parameters.Parameter[0].Value := @Quality;
// 获取图像格式bmp编码器的ClsID
GetEncoderClsid('image/bmp', Clsid);
// 选择图像的各个帧为当前帧,并依次保存为bmp文件
if savedialog1.execute then
for I := 0 to Count - 1 do
begin
Image.SelectActiveFrame(GUID, I);
Image.Save(savedialog1.filename+IntToStr(I) + '.bmp', Clsid, @Parameters);
end;
finally
Image.Free;
end;
end;
第一个代码:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm}
const BmpPath = 'C:\Temp\Test.bmp';
procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
clr: TColor;
X,Y:INTEGER;
pixels: TStrings;
begin
X:=STRTOINT(EDIT1.TEXT);
Y:=STRTOINT(EDIT2.TEXT);
bit := TBitmap.Create;
bit.LoadFromFile(BmpPath); {载入图片}
clr := bit.Canvas.Pixels[X,Y]; {获取第一像素的颜色值}
pixels:= TStringList.Create;
if FileExists('c:\temp.txt') then
pixels.LoadFromFile('c:\temp.txt');
pixels.Add(IntToHex(clr, 0));
pixels.SaveToFile('c:\temp.txt');
pixels.Free;
bit.Free; end; end.
第二个:
procedure TForm1.Button1Click(Sender: TObject);
var
I, Count: Integer;
Clsid: TClsid;
Parameters: TEncoderParameters;
Quality: Integer;
Image: TGpImage;
GUID: TGUID;
begin
// 打开图像文件
if opendialog1.execute then
Image := TGpImage.Create(opendialog1.filename);
try
// 获取图像所有帧维度的GUID,这里我们只取第一个
Image.GetFrameDimensionsList(@GUID, 1);
// 通过获取维度的GUID,取得图像的帧(页)数量
Count := Image.GetFrameCount(GUID);
// 下面设置自定义的编码参数,这里为1个参数
Parameters.Count := 1;
// 设置参数唯一标志的GUID,这里为编码品质
Parameters.Parameter[0].Guid := EncoderQuality;
// 设置参数值的数据类型为长整型
Parameters.Parameter[0].ValueType := EncoderParameterValueTypeLong;
Parameters.Parameter[0].NumberOfValues := 1;
// 设置参数的值:品质等级,最高为100,图像文件大小与品质成正比
Quality := 100;
Parameters.Parameter[0].Value := @Quality;
// 获取图像格式bmp编码器的ClsID
GetEncoderClsid('image/bmp', Clsid);
// 选择图像的各个帧为当前帧,并依次保存为bmp文件
if savedialog1.execute then
for I := 0 to Count - 1 do
begin
Image.SelectActiveFrame(GUID, I);
Image.Save(savedialog1.filename+IntToStr(I) + '.bmp', Clsid, @Parameters);
end;
finally
Image.Free;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货