In order to flood fill drawn objects, you can make use of the next sample:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FloodFill
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Bitmap bm;
Graphics g;
private bool SameColor(Color c1, Color c2)
{
return ((c1.A == c2.A) && (c1.B == c2.B) && (c1.G == c2.G) && (c1.R == c2.R));
}
private void tobien1(Bitmap bm, Point p, Color Color, Color LineColor)
{
Stack S = new Stack();
S.Push(p);
while (S.Count != 0)
{
p = S.Pop();
Color CurrentColor = bm.GetPixel(p.X, p.Y);
if (!SameColor(CurrentColor, Color) && !SameColor(CurrentColor, LineColor))
{
bm.SetPixel(p.X, p.Y, Color);
S.Push(new Point(p.X – 1, p.Y));
S.Push(new Point(p.X + 1, p.Y));
S.Push(new Point(p.X, p.Y – 1));
S.Push(new Point(p.X, p.Y + 1));
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
g = this.CreateGraphics();
}
private void DrawRectangle(Bitmap bm, Point p, int width, int height, Color c)
{
Graphics g = Graphics.FromImage(bm);
g.DrawRectangle(new Pen(c), p.X, p.Y, width, height);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
bm = new Bitmap(ClientSize.Width, ClientSize.Height);
DrawRectangle(bm, new Point(100,100), 200, 50, Color.Blue);
g.DrawImage(bm, new Point(0, 0));
}
private void button1_Click(object sender, EventArgs e)
{
tobien1(bm, new Point(120,120), Color.Violet, Color.Blue);
g.DrawImage(bm, new Point(0, 0));
}
}
}