在Java中使用不同的RGB值获得相同的颜色

时间:2015-01-28 09:14:21

标签: java swing jxl

我正在使用jxl来读取Excel文件。我需要根据单元格的字体颜色做出决定。我得到的单元格的字体颜色是黑色,但RGB值是(1,0,0)。

当我将它与Colour.BLACK进行比较时,它失败了==比较,因为Colour.BLACK的RGB值是(0,0,0)。

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

在上面的代码中,color.getDescription()在描述中给出了黑色。

我怎样才能找到"黑色"在Colour.BLACKnameCell.getCellFormat().getFont().getColour()两个对象中都很常见?

2 个答案:

答案 0 :(得分:2)

您需要一种比较Java颜色的方法。

您可以在此处找到相关信息:how could i compare colors in java?

反正:

  1. 你需要比较平等,而不是身份,所以: color == Color.BLACK必须翻译为Color.BLACK.equals(color)

  2. 由于您需要进行近似比较,因此需要一种方法来计算颜色之间的距离,并强制它在(实验确定的)值下。

  3. 以下是一个例子:

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

答案 1 :(得分:0)

rgb(1,0,0)是一个非常深灰色的颜色!

尝试

if (r <2 && g < 2 && b < 2) ....