Guest User

Current Border Script

a guest
Jul 17th, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1. public static Bitmap AddColorsBorder (Bitmap originalMap, List<Color> colorsToBorder, int borderRadius, Color borderColor, BorderPosition borderPos) //Border Position is an Enum
  2. {
  3. DirectBitmap result = DirectBitmap.fromBitmap(originalMap);
  4.  
  5. int x, y;
  6.  
  7.  
  8. for (x = 0; x < result.Width; x++)
  9. {
  10. for (y = 0; y < result.Height; y++)
  11. {
  12. if (colorsToBorder.Contains(result.GetPixel(x, y)))
  13. {
  14. List<(int, int)> currentPixels = new List<(int, int)>();
  15. List<(int, int)> nextPixels = new List<(int, int)>();
  16. List<(int, int)> allPixelsToWrite = new List<(int, int)>();
  17.  
  18. currentPixels.Add((x,y));
  19.  
  20. for (int curRadius = 0; curRadius <= borderRadius; curRadius++)
  21. {
  22. if (currentPixels.Count == 0) break;
  23. foreach ((int, int) pixel in currentPixels)
  24. {
  25. if (borderPos == BorderPosition.Center)
  26. {
  27. if (pixel.Item1 + 1 < result.Height) {nextPixels.Add((pixel.Item1 + 1, pixel.Item2));
  28. allPixelsToWrite.Add((pixel.Item1 + 1, pixel.Item2));}
  29. if (pixel.Item1 - 1 > 0) {nextPixels.Add((pixel.Item1 - 1, pixel.Item2));
  30. allPixelsToWrite.Add((pixel.Item1 - 1, pixel.Item2));}
  31. if (pixel.Item2 + 1 < result.Height) {nextPixels.Add((pixel.Item1, pixel.Item2 + 1));
  32. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 + 1));}
  33. if (pixel.Item2 - 1 > 0) {nextPixels.Add((pixel.Item1, pixel.Item2 - 1));
  34. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 - 1));}
  35. }
  36. else if (borderPos == BorderPosition.Outer)
  37. {
  38. if (pixel.Item1 + 1 < result.Height && !colorsToBorder.Contains(result.GetPixel(pixel.Item1 + 1, pixel.Item2)))
  39. {
  40. nextPixels.Add((pixel.Item1 + 1, pixel.Item2));
  41. allPixelsToWrite.Add((pixel.Item1 + 1, pixel.Item2));
  42. }
  43. if (pixel.Item1 - 1 > 0 && !colorsToBorder.Contains(result.GetPixel(pixel.Item1 - 1, pixel.Item2)))
  44. {
  45. nextPixels.Add((pixel.Item1 - 1, pixel.Item2));
  46. allPixelsToWrite.Add((pixel.Item1 - 1, pixel.Item2));
  47. }
  48. if (pixel.Item2 + 1 < result.Height && !colorsToBorder.Contains(result.GetPixel(pixel.Item1, pixel.Item2 + 1)))
  49. {
  50. nextPixels.Add((pixel.Item1, pixel.Item2 + 1));
  51. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 + 1));
  52. }
  53. if (pixel.Item2 - 1 > 0 && !colorsToBorder.Contains(result.GetPixel(pixel.Item1, pixel.Item2 - 1)))
  54. {
  55. nextPixels.Add((pixel.Item1, pixel.Item2 - 1));
  56. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 - 1));
  57. }
  58. }
  59. else //Inner
  60. {
  61. if (pixel.Item1 + 1 < result.Height && colorsToBorder.Contains(result.GetPixel(pixel.Item1 + 1, pixel.Item2)))
  62. {
  63. nextPixels.Add((pixel.Item1 + 1, pixel.Item2));
  64. allPixelsToWrite.Add((pixel.Item1 + 1, pixel.Item2));
  65. }
  66. if (pixel.Item1 - 1 > 0 && colorsToBorder.Contains(result.GetPixel(pixel.Item1 - 1, pixel.Item2)))
  67. {
  68. nextPixels.Add((pixel.Item1 - 1, pixel.Item2));
  69. allPixelsToWrite.Add((pixel.Item1 - 1, pixel.Item2));
  70. }
  71. if (pixel.Item2 + 1 < result.Height && colorsToBorder.Contains(result.GetPixel(pixel.Item1, pixel.Item2 + 1)))
  72. {
  73. nextPixels.Add((pixel.Item1, pixel.Item2 + 1));
  74. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 + 1));
  75. }
  76. if (pixel.Item2 - 1 > 0 && colorsToBorder.Contains(result.GetPixel(pixel.Item1, pixel.Item2 - 1)))
  77. {
  78. nextPixels.Add((pixel.Item1, pixel.Item2 - 1));
  79. allPixelsToWrite.Add((pixel.Item1, pixel.Item2 - 1));
  80. }
  81. }
  82.  
  83. }
  84. currentPixels = nextPixels;
  85. nextPixels = new List<(int, int)>();
  86. if (borderPos == BorderPosition.Center) curRadius++;
  87. }
  88.  
  89. foreach((int, int) pixel in allPixelsToWrite)
  90. {
  91. result.SetPixel(pixel.Item1, pixel.Item2, borderColor);
  92. }
  93. }
  94. }
  95. }
  96.  
  97. Bitmap result2 = new Bitmap(originalMap.Width, originalMap.Height);
  98.  
  99. Graphics.FromImage(result2).DrawImage(result.Bitmap, 0, 0, originalMap.Width, originalMap.Height);
  100.  
  101. result.Dispose();
  102.  
  103. return result2;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment