GDI++ 创建TIF文件问题 200分献上!
问题:
想打开一份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 错误 。非常郁闷。如果每一帧的图片都比较大时,程序报错的机率非常的高。
希望所有大、中、小虾们都给点意见,顶者有分!,
[解决办法]
本来以为自己对GDI+比较熟悉,看到楼主的问题后,我才发现自己的无知。
再等等吧,期待高手。顶!
[解决办法]
等待牛人..
[解决办法]
img能否每保存一帧时才创建,保存完后再释放,如此循环
[解决办法]