Delphi无法打开WMF文件?

时间:2019-01-08 09:39:52

标签: delphi wmf

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

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

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

        Picture.Free;
    end;    

但是我总是会得到无效的图形异常。我尝试使用其他工具(例如ACDSee)打开wmf文件,并确认图像已完成,确定。为什么Delphi无法打开它。我尝试了不同版本的Delphi,但都失败了。

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

谢谢

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

尽管如此,WMF确实是16位以来的传统图像格式。如果您真的想使用图元文件,则应该改用TMetafile也支持的EMF。

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

2:您的文件将自己标识为MEMORYMETAFILE格式而不是DISKMETAFILE格式的不可放置图元文件。我想知道这是否与您的问题有关?