Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.84 KB | None | 0 0
  1. package me.zeroeightsix.kami.util;
  2.  
  3. import java.awt.*;
  4. import java.util.ArrayList;
  5.  
  6. /**
  7. * Java Code to get a color name from rgb/hex value/awt color
  8. *
  9. * The part of looking up a color name from the rgb values is edited from
  10. * https://gist.github.com/nightlark/6482130#file-gistfile1-java (that has some errors) by Ryan Mast (nightlark)
  11. *
  12. * @author Xiaoxiao Li
  13. *
  14. */
  15. public class ColourUtils {
  16.  
  17. /**
  18. * Initialize the color list that we have.
  19. */
  20. private ArrayList<ColorName> initColorList() {
  21. ArrayList<ColorName> colorList = new ArrayList<ColorName>();
  22. colorList.add(new ColorName("AliceBlue", 0xF0, 0xF8, 0xFF));
  23. colorList.add(new ColorName("AntiqueWhite", 0xFA, 0xEB, 0xD7));
  24. colorList.add(new ColorName("Aqua", 0x00, 0xFF, 0xFF));
  25. colorList.add(new ColorName("Aquamarine", 0x7F, 0xFF, 0xD4));
  26. colorList.add(new ColorName("Azure", 0xF0, 0xFF, 0xFF));
  27. colorList.add(new ColorName("Beige", 0xF5, 0xF5, 0xDC));
  28. colorList.add(new ColorName("Bisque", 0xFF, 0xE4, 0xC4));
  29. colorList.add(new ColorName("Black", 0x00, 0x00, 0x00));
  30. colorList.add(new ColorName("BlanchedAlmond", 0xFF, 0xEB, 0xCD));
  31. colorList.add(new ColorName("Blue", 0x00, 0x00, 0xFF));
  32. colorList.add(new ColorName("BlueViolet", 0x8A, 0x2B, 0xE2));
  33. colorList.add(new ColorName("Brown", 0xA5, 0x2A, 0x2A));
  34. colorList.add(new ColorName("BurlyWood", 0xDE, 0xB8, 0x87));
  35. colorList.add(new ColorName("CadetBlue", 0x5F, 0x9E, 0xA0));
  36. colorList.add(new ColorName("Chartreuse", 0x7F, 0xFF, 0x00));
  37. colorList.add(new ColorName("Chocolate", 0xD2, 0x69, 0x1E));
  38. colorList.add(new ColorName("Coral", 0xFF, 0x7F, 0x50));
  39. colorList.add(new ColorName("CornflowerBlue", 0x64, 0x95, 0xED));
  40. colorList.add(new ColorName("Cornsilk", 0xFF, 0xF8, 0xDC));
  41. colorList.add(new ColorName("Crimson", 0xDC, 0x14, 0x3C));
  42. colorList.add(new ColorName("Cyan", 0x00, 0xFF, 0xFF));
  43. colorList.add(new ColorName("DarkBlue", 0x00, 0x00, 0x8B));
  44. colorList.add(new ColorName("DarkCyan", 0x00, 0x8B, 0x8B));
  45. colorList.add(new ColorName("DarkGoldenRod", 0xB8, 0x86, 0x0B));
  46. colorList.add(new ColorName("DarkGray", 0xA9, 0xA9, 0xA9));
  47. colorList.add(new ColorName("DarkGreen", 0x00, 0x64, 0x00));
  48. colorList.add(new ColorName("DarkKhaki", 0xBD, 0xB7, 0x6B));
  49. colorList.add(new ColorName("DarkMagenta", 0x8B, 0x00, 0x8B));
  50. colorList.add(new ColorName("DarkOliveGreen", 0x55, 0x6B, 0x2F));
  51. colorList.add(new ColorName("DarkOrange", 0xFF, 0x8C, 0x00));
  52. colorList.add(new ColorName("DarkOrchid", 0x99, 0x32, 0xCC));
  53. colorList.add(new ColorName("DarkRed", 0x8B, 0x00, 0x00));
  54. colorList.add(new ColorName("DarkSalmon", 0xE9, 0x96, 0x7A));
  55. colorList.add(new ColorName("DarkSeaGreen", 0x8F, 0xBC, 0x8F));
  56. colorList.add(new ColorName("DarkSlateBlue", 0x48, 0x3D, 0x8B));
  57. colorList.add(new ColorName("DarkSlateGray", 0x2F, 0x4F, 0x4F));
  58. colorList.add(new ColorName("DarkTurquoise", 0x00, 0xCE, 0xD1));
  59. colorList.add(new ColorName("DarkViolet", 0x94, 0x00, 0xD3));
  60. colorList.add(new ColorName("DeepPink", 0xFF, 0x14, 0x93));
  61. colorList.add(new ColorName("DeepSkyBlue", 0x00, 0xBF, 0xFF));
  62. colorList.add(new ColorName("DimGray", 0x69, 0x69, 0x69));
  63. colorList.add(new ColorName("DodgerBlue", 0x1E, 0x90, 0xFF));
  64. colorList.add(new ColorName("FireBrick", 0xB2, 0x22, 0x22));
  65. colorList.add(new ColorName("FloralWhite", 0xFF, 0xFA, 0xF0));
  66. colorList.add(new ColorName("ForestGreen", 0x22, 0x8B, 0x22));
  67. colorList.add(new ColorName("Fuchsia", 0xFF, 0x00, 0xFF));
  68. colorList.add(new ColorName("Gainsboro", 0xDC, 0xDC, 0xDC));
  69. colorList.add(new ColorName("GhostWhite", 0xF8, 0xF8, 0xFF));
  70. colorList.add(new ColorName("Gold", 0xFF, 0xD7, 0x00));
  71. colorList.add(new ColorName("GoldenRod", 0xDA, 0xA5, 0x20));
  72. colorList.add(new ColorName("Gray", 0x80, 0x80, 0x80));
  73. colorList.add(new ColorName("Green", 0x00, 0x80, 0x00));
  74. colorList.add(new ColorName("GreenYellow", 0xAD, 0xFF, 0x2F));
  75. colorList.add(new ColorName("HoneyDew", 0xF0, 0xFF, 0xF0));
  76. colorList.add(new ColorName("HotPink", 0xFF, 0x69, 0xB4));
  77. colorList.add(new ColorName("IndianRed", 0xCD, 0x5C, 0x5C));
  78. colorList.add(new ColorName("Indigo", 0x4B, 0x00, 0x82));
  79. colorList.add(new ColorName("Ivory", 0xFF, 0xFF, 0xF0));
  80. colorList.add(new ColorName("Khaki", 0xF0, 0xE6, 0x8C));
  81. colorList.add(new ColorName("Lavender", 0xE6, 0xE6, 0xFA));
  82. colorList.add(new ColorName("LavenderBlush", 0xFF, 0xF0, 0xF5));
  83. colorList.add(new ColorName("LawnGreen", 0x7C, 0xFC, 0x00));
  84. colorList.add(new ColorName("LemonChiffon", 0xFF, 0xFA, 0xCD));
  85. colorList.add(new ColorName("LightBlue", 0xAD, 0xD8, 0xE6));
  86. colorList.add(new ColorName("LightCoral", 0xF0, 0x80, 0x80));
  87. colorList.add(new ColorName("LightCyan", 0xE0, 0xFF, 0xFF));
  88. colorList.add(new ColorName("LightGoldenRodYellow", 0xFA, 0xFA, 0xD2));
  89. colorList.add(new ColorName("LightGray", 0xD3, 0xD3, 0xD3));
  90. colorList.add(new ColorName("LightGreen", 0x90, 0xEE, 0x90));
  91. colorList.add(new ColorName("LightPink", 0xFF, 0xB6, 0xC1));
  92. colorList.add(new ColorName("LightSalmon", 0xFF, 0xA0, 0x7A));
  93. colorList.add(new ColorName("LightSeaGreen", 0x20, 0xB2, 0xAA));
  94. colorList.add(new ColorName("LightSkyBlue", 0x87, 0xCE, 0xFA));
  95. colorList.add(new ColorName("LightSlateGray", 0x77, 0x88, 0x99));
  96. colorList.add(new ColorName("LightSteelBlue", 0xB0, 0xC4, 0xDE));
  97. colorList.add(new ColorName("LightYellow", 0xFF, 0xFF, 0xE0));
  98. colorList.add(new ColorName("Lime", 0x00, 0xFF, 0x00));
  99. colorList.add(new ColorName("LimeGreen", 0x32, 0xCD, 0x32));
  100. colorList.add(new ColorName("Linen", 0xFA, 0xF0, 0xE6));
  101. colorList.add(new ColorName("Magenta", 0xFF, 0x00, 0xFF));
  102. colorList.add(new ColorName("Maroon", 0x80, 0x00, 0x00));
  103. colorList.add(new ColorName("MediumAquaMarine", 0x66, 0xCD, 0xAA));
  104. colorList.add(new ColorName("MediumBlue", 0x00, 0x00, 0xCD));
  105. colorList.add(new ColorName("MediumOrchid", 0xBA, 0x55, 0xD3));
  106. colorList.add(new ColorName("MediumPurple", 0x93, 0x70, 0xDB));
  107. colorList.add(new ColorName("MediumSeaGreen", 0x3C, 0xB3, 0x71));
  108. colorList.add(new ColorName("MediumSlateBlue", 0x7B, 0x68, 0xEE));
  109. colorList.add(new ColorName("MediumSpringGreen", 0x00, 0xFA, 0x9A));
  110. colorList.add(new ColorName("MediumTurquoise", 0x48, 0xD1, 0xCC));
  111. colorList.add(new ColorName("MediumVioletRed", 0xC7, 0x15, 0x85));
  112. colorList.add(new ColorName("MidnightBlue", 0x19, 0x19, 0x70));
  113. colorList.add(new ColorName("MintCream", 0xF5, 0xFF, 0xFA));
  114. colorList.add(new ColorName("MistyRose", 0xFF, 0xE4, 0xE1));
  115. colorList.add(new ColorName("Moccasin", 0xFF, 0xE4, 0xB5));
  116. colorList.add(new ColorName("NavajoWhite", 0xFF, 0xDE, 0xAD));
  117. colorList.add(new ColorName("Navy", 0x00, 0x00, 0x80));
  118. colorList.add(new ColorName("OldLace", 0xFD, 0xF5, 0xE6));
  119. colorList.add(new ColorName("Olive", 0x80, 0x80, 0x00));
  120. colorList.add(new ColorName("OliveDrab", 0x6B, 0x8E, 0x23));
  121. colorList.add(new ColorName("Orange", 0xFF, 0xA5, 0x00));
  122. colorList.add(new ColorName("OrangeRed", 0xFF, 0x45, 0x00));
  123. colorList.add(new ColorName("Orchid", 0xDA, 0x70, 0xD6));
  124. colorList.add(new ColorName("PaleGoldenRod", 0xEE, 0xE8, 0xAA));
  125. colorList.add(new ColorName("PaleGreen", 0x98, 0xFB, 0x98));
  126. colorList.add(new ColorName("PaleTurquoise", 0xAF, 0xEE, 0xEE));
  127. colorList.add(new ColorName("PaleVioletRed", 0xDB, 0x70, 0x93));
  128. colorList.add(new ColorName("PapayaWhip", 0xFF, 0xEF, 0xD5));
  129. colorList.add(new ColorName("PeachPuff", 0xFF, 0xDA, 0xB9));
  130. colorList.add(new ColorName("Peru", 0xCD, 0x85, 0x3F));
  131. colorList.add(new ColorName("Pink", 0xFF, 0xC0, 0xCB));
  132. colorList.add(new ColorName("Plum", 0xDD, 0xA0, 0xDD));
  133. colorList.add(new ColorName("PowderBlue", 0xB0, 0xE0, 0xE6));
  134. colorList.add(new ColorName("Purple", 0x80, 0x00, 0x80));
  135. colorList.add(new ColorName("Red", 0xFF, 0x00, 0x00));
  136. colorList.add(new ColorName("RosyBrown", 0xBC, 0x8F, 0x8F));
  137. colorList.add(new ColorName("RoyalBlue", 0x41, 0x69, 0xE1));
  138. colorList.add(new ColorName("SaddleBrown", 0x8B, 0x45, 0x13));
  139. colorList.add(new ColorName("Salmon", 0xFA, 0x80, 0x72));
  140. colorList.add(new ColorName("SandyBrown", 0xF4, 0xA4, 0x60));
  141. colorList.add(new ColorName("SeaGreen", 0x2E, 0x8B, 0x57));
  142. colorList.add(new ColorName("SeaShell", 0xFF, 0xF5, 0xEE));
  143. colorList.add(new ColorName("Sienna", 0xA0, 0x52, 0x2D));
  144. colorList.add(new ColorName("Silver", 0xC0, 0xC0, 0xC0));
  145. colorList.add(new ColorName("SkyBlue", 0x87, 0xCE, 0xEB));
  146. colorList.add(new ColorName("SlateBlue", 0x6A, 0x5A, 0xCD));
  147. colorList.add(new ColorName("SlateGray", 0x70, 0x80, 0x90));
  148. colorList.add(new ColorName("Snow", 0xFF, 0xFA, 0xFA));
  149. colorList.add(new ColorName("SpringGreen", 0x00, 0xFF, 0x7F));
  150. colorList.add(new ColorName("SteelBlue", 0x46, 0x82, 0xB4));
  151. colorList.add(new ColorName("Tan", 0xD2, 0xB4, 0x8C));
  152. colorList.add(new ColorName("Teal", 0x00, 0x80, 0x80));
  153. colorList.add(new ColorName("Thistle", 0xD8, 0xBF, 0xD8));
  154. colorList.add(new ColorName("Tomato", 0xFF, 0x63, 0x47));
  155. colorList.add(new ColorName("Turquoise", 0x40, 0xE0, 0xD0));
  156. colorList.add(new ColorName("Violet", 0xEE, 0x82, 0xEE));
  157. colorList.add(new ColorName("Wheat", 0xF5, 0xDE, 0xB3));
  158. colorList.add(new ColorName("White", 0xFF, 0xFF, 0xFF));
  159. colorList.add(new ColorName("WhiteSmoke", 0xF5, 0xF5, 0xF5));
  160. colorList.add(new ColorName("Yellow", 0xFF, 0xFF, 0x00));
  161. colorList.add(new ColorName("YellowGreen", 0x9A, 0xCD, 0x32));
  162. return colorList;
  163. }
  164.  
  165. /**
  166. * SubClass of ColorUtils. In order to lookup color name
  167. *
  168. * @author Xiaoxiao Li
  169. *
  170. */
  171. public static int toRGBA(double r, double g, double b, double a) {
  172. return toRGBA((float) r, (float) g, (float) b, (float) a);
  173. }
  174.  
  175. /**
  176. * Get the closest color name from our list
  177. *
  178. * @param r
  179. * @param g
  180. * @param b
  181. * @return
  182. */
  183. public String getColorNameFromRgb(int r, int g, int b) {
  184. ArrayList<ColorName> colorList = initColorList();
  185. ColorName closestMatch = null;
  186. int minMSE = Integer.MAX_VALUE;
  187. int mse;
  188. for (ColorName c : colorList) {
  189. mse = c.computeMSE(r, g, b);
  190. if (mse < minMSE) {
  191. minMSE = mse;
  192. closestMatch = c;
  193. }
  194. }
  195.  
  196. if (closestMatch != null) {
  197. return closestMatch.getName();
  198. } else {
  199. return "No matched color name.";
  200. }
  201. }
  202.  
  203. /**
  204. * Convert hexColor to rgb, then call getColorNameFromRgb(r, g, b)
  205. *
  206. * @param hexColor
  207. * @return
  208. */
  209. public String getColorNameFromHex(int hexColor) {
  210. int r = (hexColor & 0xFF0000) >> 16;
  211. int g = (hexColor & 0xFF00) >> 8;
  212. int b = (hexColor & 0xFF);
  213. return getColorNameFromRgb(r, g, b);
  214. }
  215.  
  216. public int colorToHex(Color c) {
  217. return Integer.decode("0x"
  218. + Integer.toHexString(c.getRGB()).substring(2));
  219. }
  220.  
  221. public String getColorNameFromColor(Color color) {
  222. return getColorNameFromRgb(color.getRed(), color.getGreen(),
  223. color.getBlue());
  224. }
  225. public class ColorName {
  226.  
  227. public int r, g, b;
  228. public String name;
  229.  
  230. public ColorName(String name, int r, int g, int b) {
  231. this.r = r;
  232. this.g = g;
  233. this.b = b;
  234. this.name = name;
  235. }
  236.  
  237. public int computeMSE(int pixR, int pixG, int pixB) {
  238. return (int) (((pixR - r) * (pixR - r) + (pixG - g) * (pixG - g) + (pixB - b)
  239. * (pixB - b)) / 3);
  240. }
  241.  
  242. public int getR() {
  243. return r;
  244. }
  245.  
  246. public int getG() {
  247. return g;
  248. }
  249.  
  250. public int getB() {
  251. return b;
  252. }
  253.  
  254. public String getName() {
  255. return name;
  256. }
  257. }
  258.  
  259. public static int toRGBA(int r, int g, int b, int a) {
  260. return (r << 16) + (g << 8) + (b << 0) + (a << 24);
  261. }
  262.  
  263. public static int toRGBA(float r, float g, float b, float a) {
  264. return toRGBA((int) (r * 255.f), (int) (g * 255.f), (int) (b * 255.f), (int) (a * 255.f));
  265. }
  266. public static int toRGBA(float[] colors) {
  267. if(colors.length != 4) throw new IllegalArgumentException("colors[] must have a length of 4!");
  268. return toRGBA(colors[0], colors[1], colors[2], colors[3]);
  269. }
  270. public static int toRGBA(double[] colors) {
  271. if(colors.length != 4) throw new IllegalArgumentException("colors[] must have a length of 4!");
  272. return toRGBA((float)colors[0], (float)colors[1], (float)colors[2], (float)colors[3]);
  273. }
  274.  
  275. public static int[] toRGBAArray(int colorBuffer) {
  276. return new int[] {
  277. (colorBuffer >> 16 & 255),
  278. (colorBuffer >> 8 & 255),
  279. (colorBuffer & 255),
  280. (colorBuffer >> 24 & 255)
  281. };
  282. }
  283. public static class Colors {
  284. public final static int WHITE = toRGBA(255, 255, 255, 255);
  285. public final static int BLACK = toRGBA(0, 0, 0, 255);
  286. public final static int RED = toRGBA(255, 0, 0, 255);
  287. public final static int GREEN = toRGBA(0, 255, 0, 255);
  288. public final static int BLUE = toRGBA(0, 0, 255, 255);
  289. public final static int ORANGE = toRGBA(255, 128, 0, 255);
  290. public final static int PURPLE = toRGBA(163, 73, 163, 255);
  291. public final static int GRAY = toRGBA(127, 127, 127, 255);
  292. public final static int DARK_RED = toRGBA(64, 0, 0, 255);
  293. public final static int YELLOW = toRGBA(255, 255, 0, 255);
  294. public final static int RAINBOW = Integer.MIN_VALUE;
  295. }
  296.  
  297. public static final int changeAlpha(int origColor, int userInputedAlpha) {
  298. origColor = origColor & 0x00ffffff; //drop the previous alpha value
  299. return (userInputedAlpha << 24) | origColor; //add the one the user inputted
  300. }
  301.  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement