问题描述
EmfPlusGetDC记录控制如何处理后续的EMF记录或Emfplus记录。
我想生成一个包含EmfplusGetDC
记录的EMF图像。类似于Microsoft Office生成的EMF图像,例如Office.emf,它是一个EmfType.emfPlusDual
元文件。它包含一个EmfplusGetDC
Emfplus记录,此后,它使用EXTCREATEFONTINDIRECTW
和EXTtextoutW
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记录(EXTCREATEFONTINDIRECTW
和EXTtextoutW
)以创建字体和绘制字符串。以下是它的解析记录:
NoneEmfPlusGetDC.png
我想生成一个EmfType.emfPlusDual
图元文件,其中包含一个EmfplusGetDC
Emfplus记录,后跟两个Emf记录(EXTCREATEFONTINDIRECTW
和EXTtextoutW
),以创建字体并绘制共享字符串Office.emf。不需要两个Emfplus记录(EmfplusObject(Font)
和EmfplusDrawString
)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)