Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stack<Point> stackPixels = new Stack<Point>();
- bmp = new Bitmap(panelPaint.Width, panelPaint.Height);
- panelPaint.BackgroundImage = (Image)bmp;
- panelPaint.BackgroundImageLayout = ImageLayout.None;
- //1.Поместить затравочный пиксел в стек;
- stackPixels.Push(new Point(x, y));
- Point currentPixel;
- do
- {
- //2.Извлечь пиксел из стека;
- currentPixel = stackPixels.Pop();
- //3.Присвоить пикселу требуемое значение(цвет внутренней области);
- bmp.SetPixel(currentPixel.X, currentPixel.Y, newcolor);
- //grPanel.DrawLine(currentPen, currentPixel.X, currentPixel.Y, currentPixel.X, currentPixel.Y);
- // 4.Каждый окрестный пиксел добавить в стек, если он
- //4.1.Не является граничным;
- if (currentPixel.X-1 > 0 && currentPixel.X-1 < bmp.Width && currentPixel.Y > 0 && currentPixel.Y < bmp.Height)
- {
- //4.2.Не обработан ранее(т.е.его цвет отличается от цвета границы или цвета внутренней области);
- if (bmp.GetPixel(currentPixel.X - 1, currentPixel.Y).ToArgb() == oldcolor.ToArgb())
- {
- stackPixels.Push(new Point(currentPixel.X - 1, currentPixel.Y));
- }
- }
- if (currentPixel.X + 1 > 0 && currentPixel.X + 1 < bmp.Width && currentPixel.Y > 0 && currentPixel.Y < bmp.Height)
- {
- if (bmp.GetPixel(currentPixel.X + 1, currentPixel.Y).ToArgb() == oldcolor.ToArgb())
- {
- stackPixels.Push(new Point(currentPixel.X + 1, currentPixel.Y));
- }
- }
- if (currentPixel.X > 0 && currentPixel.X < bmp.Width && currentPixel.Y - 1 > 0 && currentPixel.Y - 1 < bmp.Height)
- {
- if (bmp.GetPixel(currentPixel.X, currentPixel.Y - 1).ToArgb() == oldcolor.ToArgb())
- {
- stackPixels.Push(new Point(currentPixel.X, currentPixel.Y - 1));
- }
- }
- if (currentPixel.X > 0 && currentPixel.X < bmp.Width && currentPixel.Y + 1 > 0 && currentPixel.Y + 1 < bmp.Height)
- {
- if (bmp.GetPixel(currentPixel.X, currentPixel.Y + 1).ToArgb() == oldcolor.ToArgb())
- {
- stackPixels.Push(new Point(currentPixel.X, currentPixel.Y + 1));
- }
- }
- } while (stackPixels.Count != 0); //5.Если стек не пуст, перейти к шагу 2
- }
Add Comment
Please, Sign In to add comment