GDI+ 在Delphi程序的应用 -
GDI+ 在Delphi程序的应用 -- 多帧(页)图像的分解与合成在GDI+支持的各种图像格式,gif格式和tiff格式图像可包含多帧(页)图片,GDI+可以很方便的分解和合成多帧(页)图片。
下面是个简单的多帧(页)图片分解与合成例子:
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; padding-top: 4px;">unitmain1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls;
type
TForm1=class(TForm)
Button1:TButton;
Button2:TButton;
procedureButton1Click(Sender:TObject);
procedureButton2Click(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
usesGdiplus,GdipTypes,ActiveX;
{$R*.dfm}
//把多帧图像分解为单图像保存到文件
procedureTForm1.Button1Click(Sender:TObject);
var
I,Count:Integer;
Clsid:TClsid;
Parameters:TEncoderParameters;
Quality:Integer;
Image:TGpImage;
GUID:TGUID;
begin
//打开图像文件
Image:=TGpImage.Create('hbmap108.gif');
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;
//获取图像格式JPEG编码器的ClsID
GetEncoderClsid('image/jpeg',Clsid);
//选择图像的各个帧为当前帧,并依次保存为jpg文件
forI:=0toCount-1do
begin
Image.SelectActiveFrame(GUID,I);
Image.Save('Hb'+IntToStr(I)+'.jpg',Clsid,@Parameters);
end;
finally
Image.Free;
end;
end;
//将单个图像合并为多帧图像,GDI+不支持GIF合成,只能合并为tiff格式
procedureTForm1.Button2Click(Sender:TObject);
var
Parameters:TEncoderParameters;
Value:TEncoderValue;
Img,tmp:TGpImage;
I:Integer;
Clsid:TClsid;
begin
//下面设置自定义的编码参数,这里为1个参数
Parameters.Count:=1;
//设置参数唯一标志的GUID,这里为保存标记
Parameters.Parameter[0].Guid:=EncoderSaveFlag;
Parameters.Parameter[0].NumberOfValues:=1;
Parameters.Parameter[0].ValueType:=EncoderParameterValueTypeLong;
//设置参数的值。这里只把Value地址赋给了参数值,Value在后面具体赋值
Parameters.Parameter[0].Value:=@Value;
//打开第一个图像,这里的图像是前面代码分解后保存的jpg文件
Img:=TGpImage.Create('Hb0.jpg');
try
//获取图像格式tiff编码器的ClsID
GetEncoderClsid('image/tiff',Clsid);
//在保存第一帧图像时,编码参数值设置为多帧
Value:=EncoderValueMultiFrame;
//保存第一帧图像
Img.Save('Hb.tif',Clsid,@Parameters);
//保存随后的各帧图像时,编码参数值设置为维度页
Value:=EncoderValueFrameDimensionPage;
//依次打开后面的图像,保存到Hb.tif文件,本例图片为24帧
forI:=1to23do
begin
tmp:=TGpImage.Create('Hb'+IntToStr(I)+'.jpg');
try
Img.SaveAdd(tmp,@Parameters);
finally
tmp.Free;
end;
end;
finally
Img.Free;
end;
end;
end.
页:
[1]