c# - 绘制 emf 抗锯齿

标签 c# .net gdi+ antialiasing

有没有办法在启用抗锯齿的情况下绘制 emf 图元文件(从绘图工具导出)?我尝试过的工具无法导出抗锯齿的 emf 文件,因此我想知道在我的控件的 OnPaint 覆盖中绘制 emf 时是否可以手动将其重新打开。

如果有人可以确认在技术上可以生成抗锯齿 emf 文件,另一种解决方案是使用可以导出到抗锯齿 emf 的绘图工具,或者让第 3 方转换器稍后执行此操作。如果有人知道这样的工具,请告诉我。

编辑:查看 emf instructions 时似乎 emf 本身实际上并不能存储是否要进行抗锯齿处理的信息。至少我找不到任何东西。抗锯齿更有可能是由播放引擎完成的。例如,当我在 Word 2007 中打开一个 emf 时,它会呈现抗锯齿效果。但当我使用 GDI+“播放引擎”(Graphics.DrawImage(...)) 绘制它时却不是这样。或者当我查看标准 Windows 图像查看器时。 这让我相信有些工具实际上有自己的 emf 播放引擎。因此,也许有免费的 .NET 库(最好带有源代码)为我提供存储在已解析的 emf 文件中的 emf 指令的对象模型,这样我就可以自己播放它而不是使用 Graphics.DrawImage(... )

最佳答案

我们在 DirectX 项目中遇到了类似的问题。放大和缩小在一定程度上起作用,但它是假装的。如果这是你需要反复做的事情,你也许可以解析 WMF 的记录并用 GDI+ 抗锯齿绘制它们。

以下线程支持这一点(但它们是从 2005 年开始的,所以情况可能已经改变):

http://www.dotnet247.com/247reference/msgs/28/144605.aspx

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-sdk/1127/Graphics-DrawImage-metafile-no-antialiasing

[编辑:]

这三个程序可能为您完成这项工作:我假设您可以手动完成:

http://emf-to-vector-converter-command-line-ser.smartcode.com/info.html

http://www.verypdf.com/pdf-editor/index.html

http://www.ivanview.com/converter/emf-batch-converter.html

[编辑二:]

好吧,这里有一个程序可以让您以各种方式检查 EMF:

http://download.cnet.com/windows/3055-2383_4-10558240.html?tag=pdl-redir

...这里有一个免费软件库,可让您解析 122 条 EMF 命令并在 GDI+ 中输出它们。这应该可以解决问题:

http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx?msg=2359423

...哦,还要注意代码项目页面上的评论#3。之前好像有人用头撞过墙。希望这能解决您的问题。

关于c# - 绘制 emf 抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1783130/

相关文章:

c# - 如何在 C#.NET 中替换现有 XML 文件的内容?

c++ - 如何避免控件在 CDialog 中闪烁(MFC C++)

c# - 如何强制 Entity Framework 映射 `internal` 导航属性?

c# - 带有日期字段的 JSON 模式验证

c# - 如何使用 openpop.net 下载多个附件

c# - 我如何使用 FileSystemWatcher 跟踪文件大小,直到文件大小不再更改?

c# - 如何从WebResponse中获取返回的对象

.net - 适用于 .NET 完整框架的 SDK 样式 .csproj

c++ - gdi+ 绘制字符串反转

c# - 在绘图上使用graphics.ScaleTransform