【发布时间】:2010-12-19 11:32:51
【问题描述】:
有没有办法在启用抗锯齿的情况下绘制 emf 图元文件(从绘图工具导出)?我尝试的工具无法导出抗锯齿的 emf 文件,所以我想知道在我的控件的 OnPaint 覆盖中绘制 emf 时是否可以手动重新打开它。
如果有人可以确认在技术上可以生成抗锯齿 emf 文件,另一种解决方案是使用可以导出为抗锯齿 emf 的绘图工具或稍后让第三方转换器执行此操作。如果有人知道这样的工具,请告诉我。
编辑:查看emf instructions 时,似乎 emf 本身实际上无法存储信息,无论是否要进行抗锯齿处理。至少我什么都找不到。抗锯齿更有可能是由播放引擎完成的。例如,当我在 Word 2007 中打开一个 emf 时,它会呈现抗锯齿。但当我用 GDI+“播放引擎”(Graphics.DrawImage(...)) 绘制它时却不是这样。或者当我查看标准的 Windows 图像查看器时。
这让我相信有些工具实际上有自己的 emf 播放引擎。所以也许有免费的 .NET 库(最好带有源代码)给我一个存储在解析的 emf 文件中的 emf 指令的对象模型,这样我就可以自己播放它而不是使用Graphics.DrawImage(...)?
【问题讨论】:
-
如果所有其他方法都失败了,您可能可以将其绘制成四倍左右的大小,然后进行下采样。
-
我试过了,在小尺寸下这仍然看起来很丑陋同样使用这种方法可能会有丑陋的内存开销。 (我将一次显示很多这样的用户控件)。
-
无论如何,小尺寸看起来都很难看,因为您的点将被投射到整数像素边界。你必须选择最容易接受的丑陋风格。
-
在下采样之前不要忘记将 InterpolationMode 设置为 HighQualityBicubic。
标签: c# .net gdi+ antialiasing