Получение одного и того же цвета с другим значением RGB в Java

Я использую jxl для чтения файла Excel. Мне нужно принять решение, основываясь на цвете шрифта ячейки. Цвет шрифта ячейки, который я получаю, черный, но значение RGB равно (1, 0, 0).

Когда я сравниваю его с Colour.BLACK, сравнение == не выполняется, потому что значение RGB для Colour.BLACK равно (0,0,0).

Colour color = nameCell.getCellFormat().getFont().getColour();
if(color == Colour.BLACK) //fails this test 
     options = "0";
else
     options = "1";

В приведенном выше коде color.getDescription() дает описание черного цвета.

Как мне найти, что «черный» является общим для обоих объектов Colour.BLACK и nameCell.getCellFormat().getFont().getColour()?


person Mohamed Iqzas    schedule 28.01.2015    source источник
comment
if(color ==Colour.BLACK)//fails this test Не компилировался. Чтобы быстрее получить помощь, опубликуйте MCVE (минимальный полный проверяемый пример) или SSCCE (краткий, автономный, правильный пример). Кстати, сравнивайте объекты с .equals(..), а не с ==..   -  person Andrew Thompson    schedule 28.01.2015
comment
возможный дубликат как я могу сравнить цвета в java?   -  person Catalina Island    schedule 28.01.2015
comment
@AndrewThompson, в этом фрагменте нет ошибок компиляции. Обернув это в антире MCVE, включая общедоступный static void main..., плюс дескриптор maven для извлечения jxl, вместо этого вопрос станет неясным. К тому же вы все равно дали ответ в своем комментарии :)   -  person Joeri Hendrickx    schedule 28.01.2015


Ответы (2)


Вам нужен способ сравнения цветов в Java.

Вы можете найти соответствующую информацию здесь: как я могу сравнить цвета в java?

Так или иначе:

  1. Вам нужно сравнивать на равенство, а не на идентичность, поэтому: color == Color.BLACK должно переводиться в Color.BLACK.equals(color)

  2. Поскольку вам нужно сравнивать приблизительно, вам нужен способ вычислить расстояние между цветами и заставить его быть меньше (экспериментально определенного) значения.

Вот пример:

 public static double distance (Color c1, Color c2){
   double deltaRed=Math.pow((c1.getRed()-c2.getRed())/255.0,2.0);
   double deltaBlue=Math.pow((c1.getBlue()-c2.getBlue())/255.0,2.0);
   double deltaGreen=Math.pow((c1.getGreen()-c2.getGreen())/255.0,2.0);
   double total=Math.sqrt((deltaRed+deltaBlue+deltaGreen)/3.0);
   return total;
 }

 Color color  = nameCell.getCellFormat().getFont().getColor();
 if(distance(color,Color.BLACK) < 0.02)
     options = "0";
 else
     options = "1";    
person Carlo Pellegrini    schedule 28.01.2015

rgb(1,0,0) — очень темно-серый!

Пытаться

if (r <2 && g < 2 && b < 2) ....
person James Anderson    schedule 28.01.2015