我用DrawBezier画了一个封闭的不规则图形(边有弧度的),想要用一种颜色填充进去,想不到好办法,高手麻烦指点下~具体:如这个月亮:
我想给它填充成黄色:
这该怎么办?用c#来编,填充颜色。另一个问题:
还是这个月亮,假设里面有些杂线条(线条颜色已知),如:
我要像上面一样填成纯黄的:
我想的办法是一种颜色一种颜色的去:>>>>>>>>>>>>>>>>>>>>
这样字行不行,(有简单的更好~)程序该怎么写(要用到哪些类和方法?)希望:上面两个问题的代码+解释;(c#的)有编好的程序更好,参考一下~
谢谢!

解决方案 »

  1.   

    既然是自己画的,为什么不用GraphicsPath呢?GraphicsPath.AddBezier
    Graphics.FillPath
      

  2.   

    GraphicsPath.AddBezier 
    Graphics.FillPath 有关于这两个方法的类怎么声明,怎么使用的实例也行(有效果演示更好)!麻烦代码粘上来看一下~谢谢~
      

  3.   

    GraphicsPath  即使 用几个坐标点 表示一个大的坐标集合。然后用Graphi填充上颜色即可。
    你的第二个问题也很简单。   假设你原图bt1 
     你在创建一个一样大的图bt2
       然后通过GraphicsPath   将颜色放在bt2上。 然后将 bt1上所有 白色 透明度变为0然后将bt1放在  bt2上。
    over
      

  4.   

    using System.Drawing.Drawing2D;
    using System.Drawing;GraphicsPath gpp = new GraphicsPath();
                Point pt1 = new Point(0, 0);
                Point pt2 = new Point(0, 10);
                Point pt3 = new Point(10, 10);
                Point pt4 = new Point(10, 0);
                gpp.AddBeziers(new System.Drawing.PointF[] { pt1, pt2, pt3, pt4 });
                Graphics gp = new Graphics();
                gp.FillPath(Brushes.Blue, gpp);
                
    我没有经过试验,具体应该不行,你可以参考msdn,上面说的很详细。
      

  5.   

    画是画出来了,但那边上的怎么多了一条线?怎么处理掉?
            GraphicsPath dsd;
            Graphics gp;
            bool ssss = false;
    private void button2_Click(object sender, EventArgs e)
            {            Point pt1 = new Point(10, 50); 
                Point pt2 = new Point(50, 30);
                Point pt3 = new Point(50, 120);
                Point pt4 = new Point(10, 90);
                Point cc2 = new Point(80, 150);
                Point cc1 = new Point(80, 0);            dsd = new GraphicsPath();
                
                dsd.AddBezier( pt1, pt2, pt3, pt4);
                dsd.AddBezier( pt1,cc1,cc2, pt4 );
                
                ssss = true;
                
            
            }
    protected override void OnPaint(PaintEventArgs e)
            {
                Pen reds = new Pen(Color.Red  , 2);
                Brush dsds = Brushes.Yellow ;
                base.OnPaint(e);
                gp = e.Graphics;
                gp.Clear(Color.White);
                if (ssss)
                {
                    gp.DrawPath(reds, dsd);
                    gp.FillPath(dsds, dsd);
                }        }
    问题出在哪?
      

  6.   

    楼上,我说,

    AddBeziers (开始点,控制点1,控制点2,节点1,控制点3,控制点4,节点2,控制点5,控制点6,...... ,终点(和开始点相同的话连接))没问题了~