我需要创建一些内存中(不是基于文件的)元文件并显示它们。在我表单上的面板的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方法绘制它。
发布于 2012-11-01 14:23:24
好吧,那很简单。在我最初的示例中,我忽略了一些我认为没有必要的细节,比如处理我使用的GDI对象。但是,在元文件的情况下,释放正在使用的对象似乎是至关重要的。只有在这样做之后,图元文件才会“完成”,并且您可以绘制它(顺便说一句,它还报告了一个正确的PhysicalDimension )。
因此,上述代码应以这样的方式进行调整:
using( Graphics graphics = Graphics.FromImage( metafile ) )
{
graphics.FillRectangle( Brushes.LightYellow, 0, 0, 100, 100 );
graphics.DrawLine( Pens.Red, 50, 50, 100, 100 );
}https://stackoverflow.com/questions/13175138
复制相似问题