2010-11-08 8 views

Antwort

6
  1. Füllen Sie eine Liste mit "bekannten" Farben auf.
  2. Für jede bekannte Farb berechnen:

    rgbDistance = Math.abs(myColor.getRed() - colorI.getRed() + 
           Math.abs(myColor.getGreen() - colorI.getGreen()) + 
           Math.abs(myColor.getBlue() - colorI.getBlue()) 
    
  3. Rückkehr der Name colorI für die rgbDistance kleinste war.

+0

Hallo danke für deinen Vorschlag. Müsste möglicherweise verdauen, wie der kleinste Wert zurückgegeben wird? – user236501

+0

Was bedeutet myColor und color – user236501

+0

myColor ist die Farbe, nach der Sie einen Namen suchen. colorI ist die i_th Farbe aus Ihrer Liste bekannter Farben. – Ivan

2

Nicht alle RGB-Werte haben Aliase. Möglicherweise müssen Sie ein Array erstellen, das Arrays aus Rot-, Grün-, Blau- und Alias-Werten enthält. Dann würden Sie über dieses Array iterieren, um die RGB-Werte zu vergleichen.

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

Edit:

Probe:

//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

Oder verwenden Sie eine 'Map'. – starblue

+0

Gibt es einen Probencode? Ich probierte google show me html – user236501

+0

Hallo, danke für Ihren Beispielcode, aber wenn ich alle Farben gezeigt habe, ist der Name etwas anders, ok wie allgemeine Farbe, keine Notwendigkeit zu spezifizieren, in diesem Fall wie kann ich sie gruppieren? – user236501

1

Sie könnten einfach eine Lookup-Tabelle erstellen, zum Beispiel unter Verwendung der Konstanten von Color-Klasse selbst:

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()); 
    } 
} 

Wenn Sie alle HTML-Farben oder alle jene Form wollen Wikipedia von @ Evan verbunden, haben Sie noch ein wenig Hausaufgaben obwohl zu tun haben.

EDIT resultierende Karte:

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

Hallo ich versuche deinen Code, aber c.getName() das gibt mir einen Fehler sagte, muss hinzufügen casted c? – user236501

+0

@ user236501 meine schlechte, es ist natürlich f.getName() statt – sfussenegger

+0

Wenn ich mit rgb vergleichen, wie kann ich hex in rgb konvertieren? – user236501

3

Hmm, das ist eine Art von Spaß Problem. Ich kann mir ein paar Lösungen:

  1. Sie könnten ein wenig Rätselraten tun, abhängig von den Beziehungen zwischen den RGB-Werten (zum Beispiel, wenn eine Farbe sehr dominant ist, dass man vermuten, aber wenn es ein bisschen ist andere Farbe erhalten Sie mehr und mehr wahrscheinlich die Kombination dieser beiden emittierten Farben zu erraten, wenn alle drei gleich nahe sind dann erraten, weiß, grau oder schwarz, je nachdem, wie hoch der Durchschnitt der drei Werte ist, wenn zwei hoch sind und die andere ist niedrig rate die Kombination der beiden, usw.)

  2. Sie könnten für einen Lernansatz gehen, wo Sie einige erste Schätzungen (wie oben) und dann auf denen basierend auf Feedback von uns verbessern ers.

Leider ist dieses Problem relativ subjektiv (obwohl die Frage ist nicht!) Als Farbwahrnehmung des Menschen weit zwischen Kultur variiert und sogar Geschlecht (siehe Randall Munroe's "study" on it).

Wenn Sie eine bestimmte Teilmenge von RGB-Werten (wie diejenigen, die Konstanten in Java oder C# gegeben sind) können Sie durchlaufen und vergleichen, schließlich einen Standardwert zurückgeben, wenn sie nicht gleich ist.

[EDIT]

Ahh! Farbblinde Benutzer wie? Haben Sie darüber nachgedacht, eine Einstellung zu erstellen, mit der der Benutzer angeben kann, für welche Farben die Unterscheidung schwierig ist? Wenn ja, dass man sie konnte wissen, dass etwas „20% Redder als Green“ ist (wenn zum Beispiel sie Rot-Grün Sehschwäche hatte, die am häufigsten ist). Das wäre ziemlich einfach.Sie wählen einen Pixel, und folgen Sie diesem Pseudo-Code:

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"; 
    } 
} 

Das ist eine einfache und sinnvolle Lösung sein könnte.

+0

Hallo danke für deinen Vorschlag, ich mache ein Programm, das blinden Menschen hilft, die Farbe zu erkennen. Ich muss jeden RGB mögen, der einen allgemeinen Namen des Farbennamens zurückgibt, den kein Spezifizieren erfordert. – user236501

1

Erste aller Konvertieren Pixel von RGB zu HSV. Es ist viel einfacher, Farbbereiche in HSV als in RGB zu definieren.

/** 
* 
*@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

Hier ist a working sample code das tut das. Es konvertiert eine rgb/hex-Wert/awt-Farbe in den nächsten Farbnamen.

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

In meinem Fall ich war auf der Suche nach einem schnellen Weg, den Namen der Primärfarben darstellbaren auf alle auf oder alle aus LEDs, so dass die folgenden Funktion funktioniert für mich zu bekommen. Ich hoffe, es ist hilfreich für jemanden.

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; 
}