0

我正在使用德尔福 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下载

谢谢

4

2 回答 2

3

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

于 2019-01-08T10:11:19.197 回答
0

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

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

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

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

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

于 2019-01-08T19:26:19.633 回答