问题:
想打开一份TIF图片文件,然后直接在往这份文件里插入新的页。
目前代码如下:procedure TForm1.Button1Click(Sender: TObject);
// 将单个图像合并为多帧图像,GDI+不支持GIF合成,只能合并为tiff格式
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帧
for I := 1 to 23 do
begin
tmp := TGpImage.Create('Hb' + IntToStr(I) + '.jpg');
try
Img.SaveAdd(tmp, @Parameters);
finally
tmp.Free;
end;
end;
finally
Img.Free;
end;
end;以上代码的本质是每次保存TIF文件时都是把所有的帧全保存一次,这样会带来一个很严重的问题,就是当这个TIFF内有数十帧图片时,这个TGpImage对象的内存占疯狂增长,然后报out of memory 错误 。非常郁闷。如果每一帧的图片都比较大时,程序报错的机率非常的高。希望所有大、中、小虾们都给点意见,顶者有分!,
想打开一份TIF图片文件,然后直接在往这份文件里插入新的页。
目前代码如下:procedure TForm1.Button1Click(Sender: TObject);
// 将单个图像合并为多帧图像,GDI+不支持GIF合成,只能合并为tiff格式
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帧
for I := 1 to 23 do
begin
tmp := TGpImage.Create('Hb' + IntToStr(I) + '.jpg');
try
Img.SaveAdd(tmp, @Parameters);
finally
tmp.Free;
end;
end;
finally
Img.Free;
end;
end;以上代码的本质是每次保存TIF文件时都是把所有的帧全保存一次,这样会带来一个很严重的问题,就是当这个TIFF内有数十帧图片时,这个TGpImage对象的内存占疯狂增长,然后报out of memory 错误 。非常郁闷。如果每一帧的图片都比较大时,程序报错的机率非常的高。希望所有大、中、小虾们都给点意见,顶者有分!,
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货