繁体   English   中英

GDI +嵌套图形对象

[英]GDI+ Nested Graphics objects

使用System.Drawing.Graphics ,如何拥有“嵌套的图形对象”。 主要目的是拥有几个剪切区域。

这是我想做的事情:

在此处输入图片说明

整个屏幕是一个Graphics对象

红色区域是其中的另一个图形并被裁剪

绿色区域是另一个区域,已修剪

内部Graphics对象可以是任何东西,而不仅仅是DrawString

该代码应如下所示:

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
}

注意:结果应转到图元文件并为矢量图形,因此不能创建位图并将其放置在mainG周围。

假定两个矢量上下文在被绘制时可以分开,则可以使用System.Drawing.Imaging.Metafile捕获矢量操作,然后将它们组合到更大的上下文中。

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

        }  
    } 

}

一种替代方法是研究增强型图元文件格式( http://msdn.microsoft.com/zh-cn/library/cc230724.aspx )并尝试手动重现剪贴蒙版。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM