2016-06-23 4 views
0

Je programme en C# (forme de fenêtre) pour le but image processing. J'ai une image Bitmap. Dans mon image j'ai fermé la courbe qui peut être convex ou concave. La limite de la courbe est illustrée par une couleur spéciale. Je veux le remplir d'une couleur de remplissage. J'implémente ma méthode (quelque chose comme le remplissage d'inondation) mais j'obtiens une exception de pile sur le débit. Comment écrire méthode un peu comme ceci:Remplissage de la zone convexe ou concave dans C#

FillPoly(Bitmap bitmap, Color boundaryColor, Color fillingColor) 

Note: Je AForge Net et Emgu CV bibliothèques dans mon projet. Toute solution utilisant ces bibliothèques sera acceptée.

Répondre

0

Le procédé lui-même

// 1. Graphics is more general than Bitmap 
// 2. You have to provide points of the desired polygon/curve 
private static void FillPoly(Graphics graphics, 
          Color boundary, 
          Color fillingColor, 
          params Point[] points) { 
    if (null == graphics) 
    throw new ArgumentNullException("graphics"); 

    using (SolidBrush brush = new SolidBrush(fillingColor)) { 
    using (Pen pen = new Pen(boundary)) { 
     //TODO: think over, do you want just a polygon 
     graphics.FillPolygon(brush, points); 
     graphics.DrawPolygon(pen, points); 

     //... or curve 
     // graphics.FillClosedCurve(brush, points); 
     // graphics.DrawClosedCurve(pen, points); 
    } 
    } 
} 

son en utilisant:

Bitmap bmp = new Bitmap(200, 200); 

    using (Graphics g = Graphics.FromImage(bmp)) { 
    FillPoly(g, Color.Blue, Color.Red, 
     new Point(5, 5), 
     new Point(105, 6), 
     new Point(85, 95), 
     new Point(125, 148), 
     new Point(8, 150)); 
    }