Guest User

Untitled

a guest
Jun 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. Stack<Point> stackPixels = new Stack<Point>();
  2.  
  3. bmp = new Bitmap(panelPaint.Width, panelPaint.Height);
  4.  
  5. panelPaint.BackgroundImage = (Image)bmp;
  6. panelPaint.BackgroundImageLayout = ImageLayout.None;
  7.  
  8. //1.Поместить затравочный пиксел в стек;
  9. stackPixels.Push(new Point(x, y));
  10.  
  11. Point currentPixel;
  12. do
  13. {
  14. //2.Извлечь пиксел из стека;
  15. currentPixel = stackPixels.Pop();
  16. //3.Присвоить пикселу требуемое значение(цвет внутренней области);
  17. bmp.SetPixel(currentPixel.X, currentPixel.Y, newcolor);
  18.  
  19.  
  20. //grPanel.DrawLine(currentPen, currentPixel.X, currentPixel.Y, currentPixel.X, currentPixel.Y);
  21.  
  22. // 4.Каждый окрестный пиксел добавить в стек, если он
  23.  
  24. //4.1.Не является граничным;
  25. if (currentPixel.X-1 > 0 && currentPixel.X-1 < bmp.Width && currentPixel.Y > 0 && currentPixel.Y < bmp.Height)
  26. {
  27. //4.2.Не обработан ранее(т.е.его цвет отличается от цвета границы или цвета внутренней области);
  28. if (bmp.GetPixel(currentPixel.X - 1, currentPixel.Y).ToArgb() == oldcolor.ToArgb())
  29. {
  30. stackPixels.Push(new Point(currentPixel.X - 1, currentPixel.Y));
  31. }
  32. }
  33.  
  34. if (currentPixel.X + 1 > 0 && currentPixel.X + 1 < bmp.Width && currentPixel.Y > 0 && currentPixel.Y < bmp.Height)
  35. {
  36. if (bmp.GetPixel(currentPixel.X + 1, currentPixel.Y).ToArgb() == oldcolor.ToArgb())
  37. {
  38. stackPixels.Push(new Point(currentPixel.X + 1, currentPixel.Y));
  39. }
  40. }
  41.  
  42. if (currentPixel.X > 0 && currentPixel.X < bmp.Width && currentPixel.Y - 1 > 0 && currentPixel.Y - 1 < bmp.Height)
  43. {
  44. if (bmp.GetPixel(currentPixel.X, currentPixel.Y - 1).ToArgb() == oldcolor.ToArgb())
  45. {
  46. stackPixels.Push(new Point(currentPixel.X, currentPixel.Y - 1));
  47. }
  48. }
  49.  
  50. if (currentPixel.X > 0 && currentPixel.X < bmp.Width && currentPixel.Y + 1 > 0 && currentPixel.Y + 1 < bmp.Height)
  51. {
  52. if (bmp.GetPixel(currentPixel.X, currentPixel.Y + 1).ToArgb() == oldcolor.ToArgb())
  53. {
  54. stackPixels.Push(new Point(currentPixel.X, currentPixel.Y + 1));
  55. }
  56. }
  57. } while (stackPixels.Count != 0); //5.Если стек не пуст, перейти к шагу 2
  58. }
Add Comment
Please, Sign In to add comment