Получаване на същия цвят с различна 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 (Minimal Complete Verifiable Primer) или SSCCE (Кратък, самостоятелен, правилен пример). Между другото - сравнете обекти с .equals(..), а не с == ..   -  person Andrew Thompson    schedule 28.01.2015
comment
възможен дубликат на как мога да сравня цветовете в java?   -  person Catalina Island    schedule 28.01.2015
comment
@AndrewThompson няма грешки при компилиране в този фрагмент. Опаковането на това в antire MCVE, включително public 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