2010-11-08 50 views

Respuesta

6
  1. Rellene una lista de colores "conocidos".
  2. Para cada cálculo color conocido:

    rgbDistance = Math.abs(myColor.getRed() - colorI.getRed() + 
           Math.abs(myColor.getGreen() - colorI.getGreen()) + 
           Math.abs(myColor.getBlue() - colorI.getBlue()) 
    
  3. devolver el nombre del colorI para los que rgbDistance era más pequeño.

+0

Hola, gracias por tu sugerencia. podría necesitar digerir cómo devolver el valor más pequeño? – user236501

+0

¿Qué significa myColor y colorl – user236501

+0

myColor es el color que está tratando de encontrar un nombre. colorI es el color i_th de su lista de colores conocidos. – Ivan

2

No todos los valores RGB tienen alias. Es posible que necesite crear una matriz que contenga matrices de valores Rojo, Verde, Azul y Alias. Luego iterarías sobre esa matriz comparando los valores RGB.

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

Editar:

muestra:

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

O utiliza un "Mapa". – starblue

+0

¿Hay algún código sampel? Intenté google show me html – user236501

+0

Hola, gracias por tu código de muestra, pero si quiero que todo el color se muestre, el nombre es ligeramente diferente, como color general, no es necesario especificarlo, en este caso, ¿cómo puedo agruparlos? – user236501

1

Simplemente podría construir una tabla de búsqueda, por ejemplo, usando las constantes de la propia clase Color:

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

Si desea que todos los colores HTML o todos aquellos Wikipedia forma unida por @ Evan, que tienen todavía un poco de tarea que hacer sin embargo.

EDITAR mapa resultante:

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

Hola, intento tu código, pero c.getName() me da error, dijo necesidad agregar emitido a c? – user236501

+0

@ user236501 mi malo, es por supuesto f.getName() en su lugar – sfussenegger

+0

Si comparo con rgb, ¿cómo puedo convertir hexadecimal a rgb? – user236501

3

Hmm, que es un tipo de problema de la diversión. Puedo pensar en algunas soluciones:

  1. que podría hacer un poco de conjeturas en función de las relaciones entre los valores RGB (por ejemplo, si un color es muy dominante que supongo que uno, pero si hay un poco de otro color, cada vez es más probable adivinar la combinación de esos dos colores emitidos, si los tres son casi iguales, adivine el blanco, el gris o el negro, dependiendo de qué tan alto sea el promedio de los tres valores, si dos son altos y el otro es de poca conjetura la combinación de los dos, etc. etc.)

  2. Podrías optar por un enfoque de aprendizaje más en el que estableces algunas conjeturas iniciales (como arriba) y luego las mejoras basadas en comentarios de nosotros ers.

Desafortunadamente este problema es relativamente subjetivo (aunque la cuestión no es!) Como la percepción del color de la gente varía ampliamente entre cultura e incluso de género (ver Randall Munroe's "study" on it).

Si desea un subconjunto específico de valores RGB (como los que tienen constantes en Java o C#, puede recorrer cada uno y comparar, y finalmente devolver algún valor predeterminado si no es igual a ninguno de ellos).

[EDIT]

Ahh! Usuarios daltónicos ¿eh? ¿Ha considerado crear una configuración que le permita al usuario especificar qué colores tienen problemas para diferenciar? Si hicieras eso, podrías hacerles saber que algo es "20% más rojo que verde" (si, por ejemplo, tuvieran un daltonismo rojo-verde, que es lo más común). Eso sería bastante simple.Seleccionan un píxel, y que siguen este pseudocódigo:

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

Eso podría ser una solución más simple y más útil.

+0

Hola gracias por tu sugerencia, estoy haciendo un programa para ayudar a las personas daltónicas a reconocer el color. Necesito que todos los rgb devuelvan un nombre general de nombre de color sin necesidad de especificarlo. – user236501

1

Frist de todos los píxeles de conversión de RGB a HSV. Es mucho más fácil definir rangos de color en HSV que en 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

Aquí está a working sample code que hace eso. Convierte un color rgb/hex value/awt en el nombre de color más cercano.

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

En mi caso yo estaba buscando una forma rápida de obtener el nombre de los colores primarios visualizable en todo o todo apagado LED por lo que la siguiente función funciona para mí. Espero que sea útil para alguien.

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