You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3 VCL合并单页TIFF为多页TIFF时生成空文件问题

问题原因与解决方案

为什么生成0字节空文件?

  • TBitmap不支持多页TIFF保存:TBitmap是单页位图容器,SaveToFile仅能输出单页图像,完全无法处理多页TIFF的格式要求。
  • 初始Bitmap未设置有效尺寸:你创建的multiPageBitmap没有预先指定宽高,默认尺寸极小(通常为1×1像素)。调用Canvas.Draw时,所有超出这个默认画布范围的图像内容都会被截断,最终Bitmap无有效像素数据,保存时就会生成0字节空文件。
  • 合并思路错误:当前代码是把所有TIFF页面纵向拼接成一张长图,这不是真正的多页TIFF,只是单页长图,且因为画布尺寸问题连这一点都没实现。

正确的多页TIFF合并实现

使用TWICImage处理多页TIFF,它原生支持多页图像的加载与保存:

procedure TiffsToMultiPage(const fileNames: array of string; const outputFileName: string);
var
  multiPageWic: TWICImage;
  singlePageWic: TWICImage;
  i: Integer;
begin
  multiPageWic := TWICImage.Create;
  try
    multiPageWic.ImageFormat := wifTiff; // 指定输出格式为TIFF
    multiPageWic.AllowOverwrite := True;

    for i := 0 to High(fileNames) do
    begin
      singlePageWic := TWICImage.Create;
      try
        singlePageWic.LoadFromFile(fileNames[i]);
        // 将单页图像添加到多页容器中
        multiPageWic.Add(singlePageWic);
      finally
        singlePageWic.Free;
      end;
    end;

    // 保存多页TIFF
    multiPageWic.SaveToFile(outputFileName);
  finally
    multiPageWic.Free;
  end;
end;

补充说明

  • 确保所有输入TIFF为单页格式,若输入本身是多页文件,Add方法会将其所有页面一并添加到结果中。
  • 若需设置TIFF压缩格式(如LZW、CCITT),可通过multiPageWic.Compression属性调整,例如multiPageWic.Compression := wicCompressionLZW;。

内容的提问来源于stack exchange,提问作者Hackbrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:03:17