2010-11-08 13 views

Odpowiedz

6
  1. Wypełnij listę "znanych" kolorów.
  2. Dla każdego znanego koloru obliczeniowych:

    rgbDistance = Math.abs(myColor.getRed() - colorI.getRed() + 
           Math.abs(myColor.getGreen() - colorI.getGreen()) + 
           Math.abs(myColor.getBlue() - colorI.getBlue()) 
    
  3. Powrót nazwa colorI dla których rgbDistance była najmniejsza.

+0

Dziękuję za Twoją sugestię. może trzeba przetrawić, jak zwrócić najmniejszą wartość? – user236501

+0

Co to znaczy myColor i colorl – user236501

+0

myColor to kolor, na który próbujesz znaleźć nazwę. colorI to ith kolor z Twojej listy znanych kolorów. – Ivan

2

Nie wszystkie wartości RGB mają aliasy. Może być konieczne utworzenie tablicy zawierającej tablice wartości czerwonych, zielonych, niebieskich i aliasów. Następnie należy wykonać iterację w tej tablicy porównując wartości RGB.

http://en.wikipedia.org/wiki/List_of_colors

Edit:

Próbka:

//array of known aliases and rgb values 
ArrayList colorList = new ArrayList(); 
colorList.add(new String[] {"255", "0", "0", "Red"}); 
//etc... 

Color c = new Color(255, 0, 0); //test color 
String name = "Unknown"; 
for (String[] color : colorList) 
{ 
    int r = Integer.parseInt(color[0]) //red value 
    int g = Integer.parseInt(color[1]) //green value 
    int b = Integer.parseInt(color[2]) //blue value 
    String alias = color[3]; 

    if ((c.getRed() == r) && (c.getGreen() == g) && (c.getBlue() == b)) 
    { 
     name = alias; //found it 
     break; 
    } 
} 
+0

Lub użyj "mapy". – starblue

+0

Czy istnieje kod sampel? Próbowałem google show me html – user236501

+0

Cześć, dziękuję za twój przykładowy kod, ale jeśli chcę, aby wszystkie kolory pokazały, że nazwa nieco inna jest w porządku, tak jak kolor ogólny, nie trzeba też określać, w takim przypadku jak mogę je pogrupować? – user236501

1

Można po prostu zbudować tablicę przeglądową, na przykład przy wykorzystaniu stałych od samej klasy Kolor:

Map<Integer, String> map = new HashMap<Integer, String>(); 
for (Field f : Color.class.getFields()) { 
    if (f.getType() == Color.class) { 
    Color c = (Color) f.get(null); 
    map.put(c.getRGB(), f.getName()); 
    } 
} 

Jeśli chcesz wszystkie kolory HTML lub wszystkie te formy Wikipedia połączoną @evan, masz jeszcze trochę pracy domowej do zrobienia choć.

EDIT wynikające mapa:

0xff00ffff: CYAN 
0xff0000ff: BLUE 
0xffc0c0c0: LIGHT_GRAY 
0xff808080: GRAY 
0xffffff00: YELLOW 
0xffff0000: RED 
0xffffafaf: PINK 
0xff000000: BLACK 
0xff00ff00: GREEN 
0xffffc800: ORANGE 
0xff404040: DARK_GRAY 
0xffff00ff: MAGENTA 
0xffffffff: WHITE 
+0

Witam próbuję twój kod, ale c.getName() to daje mi błąd odleć do c? – user236501

+0

@ user236501 mój zły, to oczywiście f.getName() zamiast – sfussenegger

+0

Jeśli porównać z rgb jak mogę przekonwertować hex do rgb? – user236501

3

Hmm, to rodzaj problemu zabawy. Mogę myśleć o kilka rozwiązań:

  1. Można zrobić trochę domysłów w zależności od relacji pomiędzy wartościami RGB (na przykład, jeśli jeden kolor jest bardzo dominująca się domyślić, że jeden, ale jeśli jest nieco innego koloru coraz bardziej prawdopodobne odgadnięcie kombinacji tych dwóch emitowanych kolorów, jeśli wszystkie trzy są zbliżone do siebie, to zgadnij, biały, szary lub czarny, w zależności od tego, jak wysoka jest średnia z trzech wartości, jeśli dwie są wysokie a drugi jest mało prawdopodobne, kombinatory z dwóch, itp. itp.)

  2. Możesz pójść na bardziej podejście do uczenia się, gdzie ustawić kilka domyślnych domysłów (jak wyżej), a następnie poprawić na tych w oparciu o opinie od nas ers.

Niestety problem ten jest stosunkowo subiektywne (chociaż nie chodzi o to!) Jako percepcja Ludowej koloru różni się znacznie między kulturą a nawet płeć (zob Randall Munroe's "study" on it).

Jeśli chcesz określonego podzbioru wartości RGB (takich jak te, które są podane stałe w Javie lub C# można iterować przez każdą i porównać, ostatecznie zwraca niektóre wartości domyślne, jeśli nie jest równa żadnej z nich).

[EDIT]

Ahh! Użytkownicy Colorblind eh? Czy rozważałeś utworzenie ustawienia, które pozwala użytkownikowi określić, które kolory mają problemy z różnicowaniem? Gdybyś to zrobił, możesz dać im znać, że coś jest "20% bardziej czerwone niż zielone" (jeśli, na przykład, mają czerwono-zielone zabarwienie, które jest najczęstsze). To byłoby całkiem proste.Wybierali piksel i podążacie za tym pseudokodem:

if(userColorTrouble == RedGreen) 
{ 
    int redVal = colorInQuestion.GetRed(); 
    int greenVal = colorInQuestion.GetGreen(); 
    if(redVal > greenVal) 
    { 
     return "The color is " + (double)redVal/(redVal + greenVal) - .5d + "% redder than green"; 
    } 
    else 
    { 
     return "The color is " + (double)greenVal/(redVal + greenVal) - .5d + "% greener than red"; 
    } 
} 

To może być prostsze i bardziej użyteczne rozwiązanie.

+0

Cześć dzięki za twoją sugestię, robię program pomagający ślepcom rozpoznać kolor. Muszę lubić każdy zwrot rgb nazwę koloru nazwa ogólna nie trzeba określać. – user236501

1

Powiększa wszystkie konwertowane piksele z RGB na HSV. O wiele łatwiej jest zdefiniować zakresy kolorów w HSV niż w RGB.

/** 
* 
*@author Tomasz Drobiszewski 
*/ 
public class Color { 
    /** 
    * Human color table. 
    */ 
    public static final int [] [] colors = { 
      {-1,-10,-360,-0,-100,-10,-80}, 
      {1,0,360,0,100,0,50}, 
      {2,0,360,0,15,50,130}, 
      {3,0,360,0,15,130,210}, 
      {4,-15,15,15,100,50,255}, 
      {5,15,45,15,100,50,255}, 
      {6,45,75,15,100,50,255}, 
      {7,75,105,15,100,50,255}, 
      {8,105,135,15,100,50,255}, 
      {9,135,165,15,100,50,255}, 
      {10,165,195,15,100,50,255}, 
      {11,195,225,15,100,50,255}, 
      {12,225,255,15,100,50,255}, 
      {13,255,285,15,100,50,255}, 
      {14,285,315,15,100,50,255}, 
      {15,315,345,15,100,50,255}, 
      {16,345,375,15,100,50,255}, 
      {17,0,360,0,15,210,255} 
    }; 

    /** 
    * Color names. 
    */ 
    public static final String [] humanColors = { 
      "unrecognized", 
      "black", //black colors[1] 
      "grey", 
      "light_grey", 
      "red", 
      "orange", 
      "yellow", 
      "jasny_zielony", 
      "zielony", 
      "zielony", 
      "turkusowy", 
      "jasny_niebieski", 
      "niebieski", 
      "fioletowy", 
      "fioletowy", 
      "rozowy", 
      "czerwony", 
      "bialy", 
     }; 

    /** 
    * Convert from RGB do HSV 
    * 
    * @param r 
    * @param g 
    * @param b 
    * @param hsv 
    */ 
    public static void rgb2hsv(int r, int g, int b, int hsv[]) { 

     int min; // Min. value of RGB 
     int max; // Max. value of RGB 
     int delMax; // Delta RGB value 

     if (r > g) { 
      min = g; 
      max = r; 
     } else { 
      min = r; 
      max = g; 
     } 
     if (b > max) 
      max = b; 
     if (b < min) 
      min = b; 

     delMax = max - min; 

     float H = 0, S; 
     float V = max; 

     if (delMax == 0) { 
      H = 0; 
      S = 0; 

     } else { 
      S = delMax/(float) max; 
      if (r == max) 
       H = ((g - b)/(float) delMax) * 60; 
      else if (g == max) 
       H = (2 + (b - r)/(float) delMax) * 60; 
      else if (b == max) 
       H = (4 + (r - g)/(float) delMax) * 60; 

     } 

     hsv[0] = (int) (H); 
     hsv[1] = (int) (S * 100); 
     hsv[2] = (int) V; 
    } 

    /** 
    * Return human color index {@link Color#colors} 
    * 
    * @param r 
    * @param g 
    * @param b 
    * @return 
    */ 
    public static int [] getHumanColor(int r, int g, int b) { 
     int [] res = {0, 0, 0, 0}; 
     int[] hsv = new int[3]; 
     rgb2hsv(r, g, b, hsv); 
     for (int i = 1; i < colors.length; i++) { 
      if (hsv[0] <= colors[i][2] && hsv[0] >= colors[i][1] 
        && hsv[1] <= colors[i][4] && hsv[1] >= colors[i][3] 
        && hsv[2] <= colors[i][6] && hsv[2] >= colors[i][5]) { 
       res[3] = i; 
       res[0] = hsv[0]; 
       res[1] = hsv[1]; 
       res[2] = hsv[2]; 
       return res; 
      } 

     } 
     return res; 
    } 

} 
16

Oto a working sample code, który to robi. Przekształca kolor rgb/hex/awt w najbliższą nazwę koloru.

import java.awt.Color; 
import java.util.ArrayList; 

/** 
* Java Code to get a color name from rgb/hex value/awt color 
* 
* The part of looking up a color name from the rgb values is edited from 
* https://gist.github.com/nightlark/6482130#file-gistfile1-java (that has some errors) by Ryan Mast (nightlark) 
* 
* @author Xiaoxiao Li 
* 
*/ 
public class ColorUtils { 

    /** 
    * Initialize the color list that we have. 
    */ 
    private ArrayList<ColorName> initColorList() { 
     ArrayList<ColorName> colorList = new ArrayList<ColorName>(); 
     colorList.add(new ColorName("AliceBlue", 0xF0, 0xF8, 0xFF)); 
     colorList.add(new ColorName("AntiqueWhite", 0xFA, 0xEB, 0xD7)); 
     colorList.add(new ColorName("Aqua", 0x00, 0xFF, 0xFF)); 
     colorList.add(new ColorName("Aquamarine", 0x7F, 0xFF, 0xD4)); 
     colorList.add(new ColorName("Azure", 0xF0, 0xFF, 0xFF)); 
     colorList.add(new ColorName("Beige", 0xF5, 0xF5, 0xDC)); 
     colorList.add(new ColorName("Bisque", 0xFF, 0xE4, 0xC4)); 
     colorList.add(new ColorName("Black", 0x00, 0x00, 0x00)); 
     colorList.add(new ColorName("BlanchedAlmond", 0xFF, 0xEB, 0xCD)); 
     colorList.add(new ColorName("Blue", 0x00, 0x00, 0xFF)); 
     colorList.add(new ColorName("BlueViolet", 0x8A, 0x2B, 0xE2)); 
     colorList.add(new ColorName("Brown", 0xA5, 0x2A, 0x2A)); 
     colorList.add(new ColorName("BurlyWood", 0xDE, 0xB8, 0x87)); 
     colorList.add(new ColorName("CadetBlue", 0x5F, 0x9E, 0xA0)); 
     colorList.add(new ColorName("Chartreuse", 0x7F, 0xFF, 0x00)); 
     colorList.add(new ColorName("Chocolate", 0xD2, 0x69, 0x1E)); 
     colorList.add(new ColorName("Coral", 0xFF, 0x7F, 0x50)); 
     colorList.add(new ColorName("CornflowerBlue", 0x64, 0x95, 0xED)); 
     colorList.add(new ColorName("Cornsilk", 0xFF, 0xF8, 0xDC)); 
     colorList.add(new ColorName("Crimson", 0xDC, 0x14, 0x3C)); 
     colorList.add(new ColorName("Cyan", 0x00, 0xFF, 0xFF)); 
     colorList.add(new ColorName("DarkBlue", 0x00, 0x00, 0x8B)); 
     colorList.add(new ColorName("DarkCyan", 0x00, 0x8B, 0x8B)); 
     colorList.add(new ColorName("DarkGoldenRod", 0xB8, 0x86, 0x0B)); 
     colorList.add(new ColorName("DarkGray", 0xA9, 0xA9, 0xA9)); 
     colorList.add(new ColorName("DarkGreen", 0x00, 0x64, 0x00)); 
     colorList.add(new ColorName("DarkKhaki", 0xBD, 0xB7, 0x6B)); 
     colorList.add(new ColorName("DarkMagenta", 0x8B, 0x00, 0x8B)); 
     colorList.add(new ColorName("DarkOliveGreen", 0x55, 0x6B, 0x2F)); 
     colorList.add(new ColorName("DarkOrange", 0xFF, 0x8C, 0x00)); 
     colorList.add(new ColorName("DarkOrchid", 0x99, 0x32, 0xCC)); 
     colorList.add(new ColorName("DarkRed", 0x8B, 0x00, 0x00)); 
     colorList.add(new ColorName("DarkSalmon", 0xE9, 0x96, 0x7A)); 
     colorList.add(new ColorName("DarkSeaGreen", 0x8F, 0xBC, 0x8F)); 
     colorList.add(new ColorName("DarkSlateBlue", 0x48, 0x3D, 0x8B)); 
     colorList.add(new ColorName("DarkSlateGray", 0x2F, 0x4F, 0x4F)); 
     colorList.add(new ColorName("DarkTurquoise", 0x00, 0xCE, 0xD1)); 
     colorList.add(new ColorName("DarkViolet", 0x94, 0x00, 0xD3)); 
     colorList.add(new ColorName("DeepPink", 0xFF, 0x14, 0x93)); 
     colorList.add(new ColorName("DeepSkyBlue", 0x00, 0xBF, 0xFF)); 
     colorList.add(new ColorName("DimGray", 0x69, 0x69, 0x69)); 
     colorList.add(new ColorName("DodgerBlue", 0x1E, 0x90, 0xFF)); 
     colorList.add(new ColorName("FireBrick", 0xB2, 0x22, 0x22)); 
     colorList.add(new ColorName("FloralWhite", 0xFF, 0xFA, 0xF0)); 
     colorList.add(new ColorName("ForestGreen", 0x22, 0x8B, 0x22)); 
     colorList.add(new ColorName("Fuchsia", 0xFF, 0x00, 0xFF)); 
     colorList.add(new ColorName("Gainsboro", 0xDC, 0xDC, 0xDC)); 
     colorList.add(new ColorName("GhostWhite", 0xF8, 0xF8, 0xFF)); 
     colorList.add(new ColorName("Gold", 0xFF, 0xD7, 0x00)); 
     colorList.add(new ColorName("GoldenRod", 0xDA, 0xA5, 0x20)); 
     colorList.add(new ColorName("Gray", 0x80, 0x80, 0x80)); 
     colorList.add(new ColorName("Green", 0x00, 0x80, 0x00)); 
     colorList.add(new ColorName("GreenYellow", 0xAD, 0xFF, 0x2F)); 
     colorList.add(new ColorName("HoneyDew", 0xF0, 0xFF, 0xF0)); 
     colorList.add(new ColorName("HotPink", 0xFF, 0x69, 0xB4)); 
     colorList.add(new ColorName("IndianRed", 0xCD, 0x5C, 0x5C)); 
     colorList.add(new ColorName("Indigo", 0x4B, 0x00, 0x82)); 
     colorList.add(new ColorName("Ivory", 0xFF, 0xFF, 0xF0)); 
     colorList.add(new ColorName("Khaki", 0xF0, 0xE6, 0x8C)); 
     colorList.add(new ColorName("Lavender", 0xE6, 0xE6, 0xFA)); 
     colorList.add(new ColorName("LavenderBlush", 0xFF, 0xF0, 0xF5)); 
     colorList.add(new ColorName("LawnGreen", 0x7C, 0xFC, 0x00)); 
     colorList.add(new ColorName("LemonChiffon", 0xFF, 0xFA, 0xCD)); 
     colorList.add(new ColorName("LightBlue", 0xAD, 0xD8, 0xE6)); 
     colorList.add(new ColorName("LightCoral", 0xF0, 0x80, 0x80)); 
     colorList.add(new ColorName("LightCyan", 0xE0, 0xFF, 0xFF)); 
     colorList.add(new ColorName("LightGoldenRodYellow", 0xFA, 0xFA, 0xD2)); 
     colorList.add(new ColorName("LightGray", 0xD3, 0xD3, 0xD3)); 
     colorList.add(new ColorName("LightGreen", 0x90, 0xEE, 0x90)); 
     colorList.add(new ColorName("LightPink", 0xFF, 0xB6, 0xC1)); 
     colorList.add(new ColorName("LightSalmon", 0xFF, 0xA0, 0x7A)); 
     colorList.add(new ColorName("LightSeaGreen", 0x20, 0xB2, 0xAA)); 
     colorList.add(new ColorName("LightSkyBlue", 0x87, 0xCE, 0xFA)); 
     colorList.add(new ColorName("LightSlateGray", 0x77, 0x88, 0x99)); 
     colorList.add(new ColorName("LightSteelBlue", 0xB0, 0xC4, 0xDE)); 
     colorList.add(new ColorName("LightYellow", 0xFF, 0xFF, 0xE0)); 
     colorList.add(new ColorName("Lime", 0x00, 0xFF, 0x00)); 
     colorList.add(new ColorName("LimeGreen", 0x32, 0xCD, 0x32)); 
     colorList.add(new ColorName("Linen", 0xFA, 0xF0, 0xE6)); 
     colorList.add(new ColorName("Magenta", 0xFF, 0x00, 0xFF)); 
     colorList.add(new ColorName("Maroon", 0x80, 0x00, 0x00)); 
     colorList.add(new ColorName("MediumAquaMarine", 0x66, 0xCD, 0xAA)); 
     colorList.add(new ColorName("MediumBlue", 0x00, 0x00, 0xCD)); 
     colorList.add(new ColorName("MediumOrchid", 0xBA, 0x55, 0xD3)); 
     colorList.add(new ColorName("MediumPurple", 0x93, 0x70, 0xDB)); 
     colorList.add(new ColorName("MediumSeaGreen", 0x3C, 0xB3, 0x71)); 
     colorList.add(new ColorName("MediumSlateBlue", 0x7B, 0x68, 0xEE)); 
     colorList.add(new ColorName("MediumSpringGreen", 0x00, 0xFA, 0x9A)); 
     colorList.add(new ColorName("MediumTurquoise", 0x48, 0xD1, 0xCC)); 
     colorList.add(new ColorName("MediumVioletRed", 0xC7, 0x15, 0x85)); 
     colorList.add(new ColorName("MidnightBlue", 0x19, 0x19, 0x70)); 
     colorList.add(new ColorName("MintCream", 0xF5, 0xFF, 0xFA)); 
     colorList.add(new ColorName("MistyRose", 0xFF, 0xE4, 0xE1)); 
     colorList.add(new ColorName("Moccasin", 0xFF, 0xE4, 0xB5)); 
     colorList.add(new ColorName("NavajoWhite", 0xFF, 0xDE, 0xAD)); 
     colorList.add(new ColorName("Navy", 0x00, 0x00, 0x80)); 
     colorList.add(new ColorName("OldLace", 0xFD, 0xF5, 0xE6)); 
     colorList.add(new ColorName("Olive", 0x80, 0x80, 0x00)); 
     colorList.add(new ColorName("OliveDrab", 0x6B, 0x8E, 0x23)); 
     colorList.add(new ColorName("Orange", 0xFF, 0xA5, 0x00)); 
     colorList.add(new ColorName("OrangeRed", 0xFF, 0x45, 0x00)); 
     colorList.add(new ColorName("Orchid", 0xDA, 0x70, 0xD6)); 
     colorList.add(new ColorName("PaleGoldenRod", 0xEE, 0xE8, 0xAA)); 
     colorList.add(new ColorName("PaleGreen", 0x98, 0xFB, 0x98)); 
     colorList.add(new ColorName("PaleTurquoise", 0xAF, 0xEE, 0xEE)); 
     colorList.add(new ColorName("PaleVioletRed", 0xDB, 0x70, 0x93)); 
     colorList.add(new ColorName("PapayaWhip", 0xFF, 0xEF, 0xD5)); 
     colorList.add(new ColorName("PeachPuff", 0xFF, 0xDA, 0xB9)); 
     colorList.add(new ColorName("Peru", 0xCD, 0x85, 0x3F)); 
     colorList.add(new ColorName("Pink", 0xFF, 0xC0, 0xCB)); 
     colorList.add(new ColorName("Plum", 0xDD, 0xA0, 0xDD)); 
     colorList.add(new ColorName("PowderBlue", 0xB0, 0xE0, 0xE6)); 
     colorList.add(new ColorName("Purple", 0x80, 0x00, 0x80)); 
     colorList.add(new ColorName("Red", 0xFF, 0x00, 0x00)); 
     colorList.add(new ColorName("RosyBrown", 0xBC, 0x8F, 0x8F)); 
     colorList.add(new ColorName("RoyalBlue", 0x41, 0x69, 0xE1)); 
     colorList.add(new ColorName("SaddleBrown", 0x8B, 0x45, 0x13)); 
     colorList.add(new ColorName("Salmon", 0xFA, 0x80, 0x72)); 
     colorList.add(new ColorName("SandyBrown", 0xF4, 0xA4, 0x60)); 
     colorList.add(new ColorName("SeaGreen", 0x2E, 0x8B, 0x57)); 
     colorList.add(new ColorName("SeaShell", 0xFF, 0xF5, 0xEE)); 
     colorList.add(new ColorName("Sienna", 0xA0, 0x52, 0x2D)); 
     colorList.add(new ColorName("Silver", 0xC0, 0xC0, 0xC0)); 
     colorList.add(new ColorName("SkyBlue", 0x87, 0xCE, 0xEB)); 
     colorList.add(new ColorName("SlateBlue", 0x6A, 0x5A, 0xCD)); 
     colorList.add(new ColorName("SlateGray", 0x70, 0x80, 0x90)); 
     colorList.add(new ColorName("Snow", 0xFF, 0xFA, 0xFA)); 
     colorList.add(new ColorName("SpringGreen", 0x00, 0xFF, 0x7F)); 
     colorList.add(new ColorName("SteelBlue", 0x46, 0x82, 0xB4)); 
     colorList.add(new ColorName("Tan", 0xD2, 0xB4, 0x8C)); 
     colorList.add(new ColorName("Teal", 0x00, 0x80, 0x80)); 
     colorList.add(new ColorName("Thistle", 0xD8, 0xBF, 0xD8)); 
     colorList.add(new ColorName("Tomato", 0xFF, 0x63, 0x47)); 
     colorList.add(new ColorName("Turquoise", 0x40, 0xE0, 0xD0)); 
     colorList.add(new ColorName("Violet", 0xEE, 0x82, 0xEE)); 
     colorList.add(new ColorName("Wheat", 0xF5, 0xDE, 0xB3)); 
     colorList.add(new ColorName("White", 0xFF, 0xFF, 0xFF)); 
     colorList.add(new ColorName("WhiteSmoke", 0xF5, 0xF5, 0xF5)); 
     colorList.add(new ColorName("Yellow", 0xFF, 0xFF, 0x00)); 
     colorList.add(new ColorName("YellowGreen", 0x9A, 0xCD, 0x32)); 
     return colorList; 
    } 

    /** 
    * Get the closest color name from our list 
    * 
    * @param r 
    * @param g 
    * @param b 
    * @return 
    */ 
    public String getColorNameFromRgb(int r, int g, int b) { 
     ArrayList<ColorName> colorList = initColorList(); 
     ColorName closestMatch = null; 
     int minMSE = Integer.MAX_VALUE; 
     int mse; 
     for (ColorName c : colorList) { 
      mse = c.computeMSE(r, g, b); 
      if (mse < minMSE) { 
       minMSE = mse; 
       closestMatch = c; 
      } 
     } 

     if (closestMatch != null) { 
      return closestMatch.getName(); 
     } else { 
      return "No matched color name."; 
     } 
    } 

    /** 
    * Convert hexColor to rgb, then call getColorNameFromRgb(r, g, b) 
    * 
    * @param hexColor 
    * @return 
    */ 
    public String getColorNameFromHex(int hexColor) { 
     int r = (hexColor & 0xFF0000) >> 16; 
     int g = (hexColor & 0xFF00) >> 8; 
     int b = (hexColor & 0xFF); 
     return getColorNameFromRgb(r, g, b); 
    } 

    public int colorToHex(Color c) { 
     return Integer.decode("0x" 
       + Integer.toHexString(c.getRGB()).substring(2)); 
    } 

    public String getColorNameFromColor(Color color) { 
     return getColorNameFromRgb(color.getRed(), color.getGreen(), 
       color.getBlue()); 
    } 

    /** 
    * SubClass of ColorUtils. In order to lookup color name 
    * 
    * @author Xiaoxiao Li 
    * 
    */ 
    public class ColorName { 
     public int r, g, b; 
     public String name; 

     public ColorName(String name, int r, int g, int b) { 
      this.r = r; 
      this.g = g; 
      this.b = b; 
      this.name = name; 
     } 

     public int computeMSE(int pixR, int pixG, int pixB) { 
      return (int) (((pixR - r) * (pixR - r) + (pixG - g) * (pixG - g) + (pixB - b) 
        * (pixB - b))/3); 
     } 

     public int getR() { 
      return r; 
     } 

     public int getG() { 
      return g; 
     } 

     public int getB() { 
      return b; 
     } 

     public String getName() { 
      return name; 
     } 
    } 
} 
0

W moim przypadku szukałem szybki sposób uzyskać nazwę kolorów podstawowych możliwy do wyświetlania na wszystkich lub wszystko wyłączyć diody więc następująca funkcja działa dla mnie. Mam nadzieję, że komuś to pomoże.

public static String getColourName(int c) { 
    String name = "UNKNOWN"; 
    int colour = Color.BLACK; 

    if(Color.red(c) > 127) { colour |= Color.RED; } 
    if(Color.green(c) > 127) { colour |= Color.GREEN; } 
    if(Color.blue(c) > 127) { colour |= Color.BLUE; } 

    switch (colour) { 
     case Color.BLACK: 
      name = "BLACK"; 
      break; 
     case Color.BLUE: 
      name = "BLUE"; 
      break; 
     case Color.GREEN: 
      name = "GREEN"; 
      break; 
     case Color.CYAN: 
      name = "CYAN"; 
      break; 
     case Color.RED: 
      name = "RED"; 
      break; 
     case Color.MAGENTA: 
      name = "MAGENTA"; 
      break; 
     case Color.YELLOW: 
      name = "YELLOW"; 
      break; 
     case Color.WHITE: 
      name = "WHITE"; 
      break; 
    } 
    return name; 
} 
Powiązane problemy