如何使用C#在Microsoft增强型图元文件中生成EmfPlusGetDC记录

问题描述

EmfPlusGetDC记录控制如何处理后续的EMF记录或Emfplus记录。 我想生成一个包含EmfplusGetDC记录的EMF图像。类似于Microsoft Office生成的EMF图像,例如Office.emf,它是一个EmfType.emfPlusDual文件。它包含一个EmfplusGetDC Emfplus记录,此后,它使用EXTCREATEFONTINDIRECTWEXTtextoutW Emf记录来创建字体和绘制字符串。以下是它的解析记录: EmfPlusGetDC.png

当前,我使用以下代码生成EmfType.emfPlusDual图元文件

Bitmap dummyBitmap = null;
Graphics dummyGfx = null;
IntPtr hdc = IntPtr.Zero;
Metafile Metafile = null;
int width = 200;
int height = 200;

try
{
    dummyBitmap = new Bitmap(1,1);
    dummyGfx = Graphics.FromImage(dummyBitmap);

    hdc = dummyGfx.GetHdc();

    //an EmfplusDual Metafile image will be saved to C:\Dev\test.emf
    Metafile = new System.Drawing.Imaging.Metafile(@"C:\Dev\test.emf",hdc,new RectangleF(0,width,height),MetafileFrameUnit.Pixel,EmfType.emfPlusDual);

    using (Graphics g = Graphics.FromImage(Metafile))
    {
        // Declare a new font.
        System.Drawing.Font myFont = new System.Drawing.Font("Calibri",11);

        // Draw the string.
        g.DrawString("This is some text",myFont,new SolidBrush(Color.Black),10,100);
    }

}
finally
{
    if (Metafile != null)
    {
        Metafile.dispose();
    }
    if (hdc != IntPtr.Zero)
    {
        dummyGfx.ReleaseHdc(hdc);
    }
    if (dummyGfx != null)
    {
        dummyGfx.dispose();
    }
    if (dummyBitmap != null)
    {
        dummyBitmap.dispose();
    }
}

生成EmfType.emfPlusDual文件不包含EmfplusGetDC Emfplus记录。相反,它包含两个Emfplus记录(EmfplusObject(Font)EmfplusDrawString)和两个Emf记录(EXTCREATEFONTINDIRECTWEXTtextoutW)以创建字体和绘制字符串。以下是它的解析记录: NoneEmfPlusGetDC.png

我想生成一个EmfType.emfPlusDual图元文件,其中包含一个EmfplusGetDC Emfplus记录,后跟两个Emf记录(EXTCREATEFONTINDIRECTWEXTtextoutW),以创建字体并绘制共享字符串Office.emf。不需要两个Emfplus记录(EmfplusObject(Font)EmfplusDrawString)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)