未绘制内存中元文件

时间:2012-11-01 10:27:59

标签: .net gdi+ metafile

我需要创建一些内存(不是基于文件)元文件并显示它们。在我的表单上的面板的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方法绘制它。

1 个答案:

答案 0 :(得分:0)

好的,这很容易。从我的原始示例中,我省略了我认为不必要的细节,例如处理我使用的GDI对象。但是在元文件的情况下,处理你正在绘制它的Graphics对象似乎至关重要。只有在你这样做之后,图元文件才会“完成”并且你可以绘制它(顺便说一下,它也会报告一个正确的PhysicalDimension。)

所以上面的代码应该以这种方式调整:

using( Graphics graphics = Graphics.FromImage( metafile ) )
{
    graphics.FillRectangle( Brushes.LightYellow, 0, 0, 100, 100 );
    graphics.DrawLine( Pens.Red, 50, 50, 100, 100 );
}