我在Delphi XE应用程序中遇到元文件渲染问题.
问题是,当我渲染元文件时,文本太大了. Irfanview和FastReports渲染如下:
windows 7 Paint渲染得很好:(这是文本的样子)
是什么原因引起了这个?
谢谢!
解决方法
emf文件只是GDI命令的列表.实际上,系统可以使用标准的
Windows GDI命令轻松地“回放”它们(在Delphi中,TMetaFile只是这些API的包装).
当IrfanView或FastReport呈现图元文件内容时,它们只使用Windows GDI相应的命令.当Windows 7 Paint呈现图元文件内容时,它使用GDI渲染器.我甚至认为它在内部将emf文件转换为emf格式,然后使用GDI进行反混淆.
因此,如果emf文件在IrfanView或FastReport中呈现不正确,我怀疑这是因为您的元文件格式不正确:您使用的第三方图形引擎正在生成非标准的emf.可能的问题是目标系统中缺少使用的字体,并且GDI不会像GDI那样替换字体.
另一种可能性是emf文件可能是双格式:它包含emf格式(未正确创建,因此使用GDI无法正确呈现)和emf格式(使用GDI按预期呈现).通常这种双emf / emf格式不应该存在:即使官方GDI库也不允许将其元文件内容保存在emf中.这是由您的第三方库创建的某种“怪物”格式.
我建议如下:
>使用EmfExplorer下载并检查您的emf文件;
>尝试使用GDI渲染元文件;
>尝试使用emf到emf转换器API.
要使用GDI,请查看开源SynGdiPlus unit:它将为您生成的位图添加GDI抗混淆.它能够将emf转换为emf.它将使用原生Vista / Seven API(就像Windows 7绘图)或Windows XP下的普通Delphi代码.