我正在使用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文件
谢谢
答案 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格式的不可放置图元文件。我想知道这是否与您的问题有关?