首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将窗体绘制到MetaFile图形对象中的C#

将窗体绘制到MetaFile图形对象中的C#
EN

Stack Overflow用户
提问于 2018-03-07 15:47:20
回答 1查看 697关注 0票数 1

我希望之前没有人问过这个问题。在这方面我找不到任何具体的东西。我有一个复杂的自定义绘制表单,我可以使用C#中的MetaFile类将其保存为矢量图形(emf)。不知何故,我就是不能让它工作。我总是得到一个1KB的空文件,也许有人能告诉我哪里做错了。

到目前为止,这是我的代码。我是不是遗漏了什么?

代码语言:javascript
复制
Graphics g = Graphics.FromImage(new Bitmap(this.Width, this.Height));
IntPtr hdc = g.GetHdc();

Metafile imageMetafile = new Metafile(filepath, hdc);

using (Graphics imageGraphics = Graphics.FromImage(imageMetafile)) 
{
       imageGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
       imageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
       this.InvokePaint(this, new PaintEventArgs(imageGraphics, new Rectangle(0, 0, this.Width, this.Height)));
}

g.ReleaseHdc();
g.Dispose();

我从ZedGraph的源代码中获得了这个代码结构的一部分。然而,ZedGraph随后通过它自己的Draw()方法提供了标准winforms所没有的所有东西。这就是我认为我也许能够使用InvokePaint来实现相同的结果,但没有任何成功的地方。

作为附注:我尝试绘制的控件元素此时已经出现在屏幕上,并且我从UI线程调用此代码。

如何使用自定义图形对象而不是常规的“在屏幕上绘制”图形对象来获取控件元素?

编辑:只是为了进一步澄清。一般来说,我对生成矢量图形没有任何问题。如果我只是开始在其中绘制形状甚至位图,那么MetaFile图形路径就可以正常工作。我面临的唯一问题是,我无法让我的UI控件使用图形对象,而不是默认的“打印到屏幕”图形对象。

EN

回答 1

Stack Overflow用户

发布于 2018-03-09 22:30:57

代码语言:javascript
复制
var imageMetafile = new Bitmap(this.Width, this.Height);

using (Graphics imageGraphics = Graphics.FromImage(imageMetafile))
{
    imageGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    imageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    imageGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, this.Size);
    imageMetafile.Save(filepath);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49146656

复制
相关文章

相似问题

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