delphi – 渲染元文件时,文本太大

我在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代码.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...