0

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

4

1 回答 1

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 );
}
于 2012-11-01T14:23:24.420 回答