C# GDI+嵌套图形对象
使用System.Drawing.Graphics,如何拥有嵌套图形对象。 主要目的是有几个裁剪区域 这就是我想做的事情: 整个屏幕是一个图形对象 红色区域是其中的另一个图形,并经过剪裁 绿色区域是另一个,修剪 内部图形对象可以是任何对象,而不仅仅是抽绳 代码应该如下所示:C# GDI+嵌套图形对象,c#,graphics,gdi+,C#,Graphics,Gdi+,使用System.Drawing.Graphics,如何拥有嵌套图形对象。 主要目的是有几个裁剪区域 这就是我想做的事情: 整个屏幕是一个图形对象 红色区域是其中的另一个图形,并经过剪裁 绿色区域是另一个,修剪 内部图形对象可以是任何对象,而不仅仅是抽绳 代码应该如下所示: using (var bmp = new System.Drawing.Bitmap(200, 200)) using (var mainG = System.Drawing.Graphics.FromImage(bmp))
using (var bmp = new System.Drawing.Bitmap(200, 200))
using (var mainG = System.Drawing.Graphics.FromImage(bmp))
using (var redG = ???)
using (var greenG = ???)
{
redG.SetClip(new RectangleF(...));
greenG.SetClip(new RectangleF(...));
// fill redG and greenG
}
using (Graphics gRef = this.CreateGraphics())
{
IntPtr hdc = gRef.GetHdc();
using (System.Drawing.Imaging.Metafile mf =
new System.Drawing.Imaging.Metafile(hdc,
System.Drawing.Imaging.EmfType.EmfPlusDual))
{
gRef.ReleaseHdc();
using (Graphics redG = Graphics.FromImage(mf))
{
redG.SetClip(new RectangleF(...));
// .. draw on redG
}
// repeat for greenG
// .. save and or combine as desired
}
}
}
注意:结果应该放在一个元文件中,并且是矢量图形,因此,创建位图并将其放置在mainG周围不是一种选择。另一种方法是研究增强的图元文件格式,并尝试手动复制剪切遮罩。假设两个矢量上下文在被绘制时可以分开,可以使用System.Drawing.Imaging.Metafile捕获向量操作,然后将它们组合到更大的上下文中。。大概是这样的:
using (var bmp = new System.Drawing.Bitmap(200, 200))
using (var mainG = System.Drawing.Graphics.FromImage(bmp))
using (var redG = ???)
using (var greenG = ???)
{
redG.SetClip(new RectangleF(...));
greenG.SetClip(new RectangleF(...));
// fill redG and greenG
}
using (Graphics gRef = this.CreateGraphics())
{
IntPtr hdc = gRef.GetHdc();
using (System.Drawing.Imaging.Metafile mf =
new System.Drawing.Imaging.Metafile(hdc,
System.Drawing.Imaging.EmfType.EmfPlusDual))
{
gRef.ReleaseHdc();
using (Graphics redG = Graphics.FromImage(mf))
{
redG.SetClip(new RectangleF(...));
// .. draw on redG
}
// repeat for greenG
// .. save and or combine as desired
}
}
}
使用mainG.SetClipboundsOfRedArea对您不起作用吗?然后,您可以在mainG上绘制,就像它是一个单独的redG图形对象一样。然后如何剪裁绿色区域?绘制完红色后,只需将clip设置为绿色区域。问题是一般性的。它可能有两个以上的区域,区域内也可能有区域。除此之外,您不能有多个剪辑!在研究了这种格式后,我想到了这个问题,我想知道如何复制GDI+中可用的剪辑:我想现在你知道答案了:不幸的是,我找不到GDI+等价物