我需要创建一些内存(不是基于文件)元文件并显示它们。在我的表单上的面板的OnPaint
处理程序中,我调用此代码:
Metafile metafile;
using( Graphics offScreenGraphics = Graphics.FromHwndInternal( IntPtr.Zero ) )
{
IntPtr hDC = offScreenGraphics.GetHdc();
metafile = new Metafile( hDC, EmfType.EmfPlusDual );
offScreenGraphics.ReleaseHdc();
}
Graphics graphics = Graphics.FromImage( metafile );
graphics.FillRectangle( Brushes.LightYellow, 0, 0, 100, 100 );
graphics.DrawLine( Pens.Red, 50, 50, 100, 100 );
e.Graphics.DrawImage( metafile, 50, 50 );
但是,没有显示任何内容,无论我尝试在metafile
中绘制什么,它的PhysicalDimension
总是像35x35,因为单位是百分之一毫米,所以太小了!
注意:当然这是一个人为的例子,我不会创建一个图元文件只是为了在同一个方法中绘制一些图形。我需要在我的应用程序中传递元文件。这只是一个简单的测试,以确保我能够使用DrawImage
方法绘制它。
答案 0 :(得分:0)
Graphics
对象似乎至关重要。只有在你这样做之后,图元文件才会“完成”并且你可以绘制它(顺便说一下,它也会报告一个正确的PhysicalDimension
。)
所以上面的代码应该以这种方式调整:
using( Graphics graphics = Graphics.FromImage( metafile ) )
{
graphics.FillRectangle( Brushes.LightYellow, 0, 0, 100, 100 );
graphics.DrawLine( Pens.Red, 50, 50, 100, 100 );
}