2016-06-23 7 views
0

Я программирую в C# (форма окна) для цели image processing. У меня есть изображение Bitmap. На моем изображении у меня закрытая кривая, которая может быть convex или concave. Граница кривой иллюстрируется особым цветом. Я хочу заполнить его цветом заполнения. Я реализую свой метод (что-то вроде fill fill), но я получаю исключение из stack over flow. Как можно написать методу некоторые, как это:Заполните выпуклую или вогнутую область в C#

FillPoly(Bitmap bitmap, Color boundaryColor, Color fillingColor) 

Примечание: У меня есть AForge Net и Emgu CV библиотеки в моем проекте. Любое решение, использующее эти библиотеки, будет принято.

ответ

0

Метод сам по себе

// 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); 
    } 
    } 
} 

его использование:

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)); 
    } 
Смежные вопросы