首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未绘制内存中的元文件。

未绘制内存中的元文件。
EN

Stack Overflow用户
提问于 2012-11-01 10:27:58
回答 1查看 760关注 0票数 0

我需要创建一些内存中(不是基于文件的)元文件并显示它们。在我表单上的面板的OnPaint处理程序中,我将以下代码称为:

代码语言:javascript
复制
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方法绘制它。

EN

回答 1

Stack Overflow用户

发布于 2012-11-01 14:23:24

好吧,那很简单。在我最初的示例中,我忽略了一些我认为没有必要的细节,比如处理我使用的GDI对象。但是,在元文件的情况下,释放正在使用的对象似乎是至关重要的。只有在这样做之后,图元文件才会“完成”,并且您可以绘制它(顺便说一句,它还报告了一个正确的PhysicalDimension )。

因此,上述代码应以这样的方式进行调整:

代码语言:javascript
复制
using( Graphics graphics = Graphics.FromImage( metafile ) )
{
    graphics.FillRectangle( Brushes.LightYellow, 0, 0, 100, 100 );
    graphics.DrawLine( Pens.Red, 50, 50, 100, 100 );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13175138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档