相关疑难解决方法(0)

画emf antialiased

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

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

编辑:当看到emf指令时,似乎emf本身并不能真正存储信息,无论它是否被渲染为抗锯齿.至少我找不到任何东西.抗锯齿更有可能是由回放引擎完成的.例如,当我在Word 2007中打开一个emf时,它会被渲染为抗锯齿.但是当我用GDI +"回放引擎"(Graphics.DrawImage(...))绘制它时.或者当我查看标准的Windows图像查看器时.这让我相信一些工具实际上有自己的emf播放引擎.所以也许有免费的.NET库(最好有源代码)给我一个存储在解析的emf文件中的emf指令的对象模型,所以我可以自己播放而不是使用Graphics.DrawImage(...)

.net c# gdi+ antialiasing

7
推荐指数
1
解决办法
4296
查看次数

如何在C#/ WPF/WinForms中将WMF渲染到BitMap时启用消除锯齿功能?

这样做时,为什么线路等不会被消除锯齿?

using (var myGraphics = Graphics.FromImage(bitmap))
{
myGraphics.CompositingQuality = CompositingQuality.HighQuality;
myGraphics.SmoothingMode = SmoothingMode.HighQuality;
myGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

myGraphics.Clear(backgroundColor);

myGraphics.EnumerateMetafile(m_metafile, new Point(0, 0), m_metafileDelegate);
}
Run Code Online (Sandbox Code Playgroud)

委托函数如下所示:

private bool MetafileCallback(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)
{
        byte[] dataArray = null;
        if (data != IntPtr.Zero)
        {
            // Copy the unmanaged record to a managed byte buffer 
            // that can be used by PlayRecord.
            dataArray = new byte[dataSize];
            Marshal.Copy(data, dataArray, 0, dataSize);
        }

        m_metafile.PlayRecord(recordType, flags, dataSize, dataArray);

        return true;
}
Run Code Online (Sandbox Code Playgroud)

我是否需要覆盖特定类型的PlayRecord以获得抗锯齿功能? …

c# system.drawing wmf metafile .emf

5
推荐指数
1
解决办法
1042
查看次数

标签 统计

c# ×2

.emf ×1

.net ×1

antialiasing ×1

gdi+ ×1

metafile ×1

system.drawing ×1

wmf ×1