2011-04-29 95 views
0

我在我的WinForms程序中感觉到笛卡儿图形中两条曲线之间的空间时遇到一些困难。以笛卡尔图形填充两条曲线之间的空间

Basicly我有两条曲线,我画他们在使用这种方法的位图:

public Bitmap DrawEnvelope(PointF[] u, PointF[] d) 
    { 
     g = Graphics.FromImage(box); 
     g.SmoothingMode = SmoothingMode.AntiAlias; 
     g.PixelOffsetMode = PixelOffsetMode.HighQuality; 

     Pen pengraph = new Pen(Color.FromArgb(50, 0 ,0 ,200), 1F); 
     pengraph.Alignment = PenAlignment.Center; 

     g.DrawCurve(pengraph, u, 0); //uperline 
     g.DrawCurve(pengraph, d, 0); //downline 

     g.Dispose(); 

     return box; 
    } 

现在我想使用一种颜色填充这两条曲线之间的空间。如何才能做到这一点?

我在MSDN看了一下,发现了一个像FillClosedCurve的方法。但在这种情况下它并不能帮助我。

谢谢。

由圆弧Akh的评论解决

 joinedCurves.AddRange(u); 
     joinedCurves.AddRange(d.Reverse()); 

     PointF[] fillPoints = joinedCurves.ToArray(); 
     SolidBrush fillBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 200)); 
     FillMode newFillMode = FillMode.Alternate; 

     g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0); 
+0

为什么你不FillClosedCurve工作?我认为,如果你调用FillClosedCurve整个上面的曲线点集合,然后按照相反的顺序跟着下面的曲线点,所以(对于上面的曲线,x = 1 ... 10,对于下面的曲线x = 10 ... 1) FillClosedCurve会给你你想要的结果。然后,您将会像以前一样分别绘制曲线。 – Akh 2011-04-29 23:59:47

+0

@Akh Yeah它的一部分工作,但它连接上线的结束,以下线开始,它看起来很糟糕!我怎样才能让上线和下线成为闭合曲线?他们目前没有关闭,并且是两条单独的曲线。 – 2011-04-30 11:32:16

+0

@Akh ok ok我有想法,我不得不扭转下来的曲线!谢谢! – 2011-04-30 11:34:44

回答

1
List<PointF> joinedCurves = new List<PointF>(); 
joinedCurves.AddRange(u);   
jointCurves.AddRange(d.Reverse());  
PointF[] fillPoints = joinedCurves.ToArray();  
SolidBrush fillBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 200));  
FillMode newFillMode = FillMode.Alternate;  
g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0); 
相关问题