第一个代码是提取图片上任意多点的像数值(RGB),第二个是将GIF(由多张图片组成的动画)分解保存这些图片。我现在要的是可以像第一个代码一样,输入一个任意点的坐标,就可以得到GIF所有图片上该点的RGB(而不在是一张图片,所以得到的RGB的值的多少就看由多少张图片组成了的),然后保存在TXT里面,在输入另一个点的坐标,又能得到该点坐标下所有GIF的RGB,然后还是保存在同个TXT文件里面。只要我输入几个点坐标,就要保存这些点在GIF上的RGB。(记住,是要得到任意多点的RGB,例如GIF由10张图片组成,而我输入了三次点坐标,那么就要得到30个RGB的值,但是一般是有很多点,而不只是3个点)
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分钟通话, 中国电信官方发货