首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

GDI++ 创建TIF文件有关问题 200分献上

2012-02-11 
GDI++ 创建TIF文件问题 200分献上!问题:想打开一份TIF图片文件,然后直接在往这份文件里插入新的页。目前代

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能否每保存一帧时才创建,保存完后再释放,如此循环
[解决办法]

探讨
没得人回答,看来只有结贴了。可惜接分的人都没得,伤心啊!!!

热点排行