【问题标题】:Delphi cannot open WMF file?Delphi无法打开WMF文件?
【发布时间】:2019-06-02 23:29:10
【问题描述】:

我正在使用 Delphi XE3。我尝试使用以下代码打开一个 WMF 文件:

    var
        Picture: TPicture;
    begin
        Picture := TPicture.Create();

        Picture.LoadFromFile('E:\temp\thumbnail.wmf');

        Picture.Free;
    end;    

但我总是会得到无效的图形异常。我尝试用ACDSee等其他工具打开wmf文件,确认镜像完成OK。为什么Delphi打不开。我尝试了不同版本的 Delphi,但都失败了。

wmf文件可以在https://www.dropbox.com/s/wcqdma42xlra07p/thumbnail.wmf?dl=0下载

谢谢

【问题讨论】:

  • 我认为TPicture 用于光栅图像。你能用TMetafile打开它吗?
  • 我调试代码。 TPicture 只是使用 TMetafile 打开文件,但是失败了。
  • 是的,它应该工作,但它没有。我不知道支持或不支持的特定功能。我检查了bytes of the header 的前几个,至少这些似乎没问题。不幸的是,Delphi 没有详细告诉你为什么它不起作用......

标签: delphi wmf


【解决方案1】:

Delphi 只能读取以WMF Placeable Header Record 开头的可放置 WMF 元文件。给定的文件不是可放置的 WMF 图元文件。

【讨论】:

    【解决方案2】:

    TPicture 默认使用 VCL 的 TMetafile 类来加载 WMF 文件。但是,正如 Uwe 的回答所述,TMetafile 只能加载 可放置 WMF 元文件 1,并且您的文件不是可放置的 WMF 元文件 2

    即使是 VCL 的 TWICImage 类(它是 Microsoft 的 WIC(Windows 映像组件)API 的包装器,可以加载 Windows 支持的许多图像格式)也无法加载您的文件,并且该故障来自操作系统本身,而不是来自 VCL。但是,WIC 是可扩展的,因此您可以尝试实现和注册一个自定义解码器来处理您的 WMF 文件。元文件格式为documented on MSDN

    不过,WMF 确实是 16 位时代的传统图像格式。如果你真的想使用元文件,你应该改用 EMF,TMetafile 也支持。

    1:可放置的 WMF 图元文件包含一个额外的标题,用于描述应在 GDI 画布上绘制图像的 XY 坐标,以及用于缩放图像的每英寸逻辑单位数。

    2:您的文件将自己标识为 MEMORYMETAFILE 格式而不是 DISKMETAFILE 格式的不可放置元文件。请问这和你的问题有关系吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多