有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

颜色比较像素颜色Java

如何使用彩色对象找到类似的彩色像素?我知道两种颜色是否相等,您可以使用:

a.等于(b)

其中a和b是彩色对象,但如果我想找到类似的蓝色阴影,例如呢


共 (3) 个答案

  1. # 1 楼答案

    当涉及到以编程方式调整颜色值时,你有很多选择。一个非常简单的解决方案是简单地随机偏移颜色对象的通道值。将其视为变异颜色——只需选择你想要变异的颜色,并从中生成更多颜色:

    Color mutateColor(int range){
      int r = a.getRed() + (int)(Math.random() * 2 * range - range);
      r = Math.min(255, Math.max(0, r));
    
      int g = a.getGreen() + (int)(Math.random() * 2 * range - range);
      g = Math.min(255, Math.max(0, g));
    
      int b = a.getBlue() + (int)(Math.random() * 2 * range - range);
      b = Math.min(255, Math.max(0, b));
    
      return new Color(r, g, b);
    }
    

    这是最简单的例子,给出了一个范围,每个通道都被该范围偏移,结果如下:

    a few randomly colored boxes

    这是在范围值为10的情况下完成的。为了增加控制,可以向mutateColor函数添加三个参数(每个通道的偏移量)。也可以选择一个范围,但根据通道中已有的值进行更改。例如:

    range = 0.25
    red = 100
    green = 10
    blue = 0
    
    redRange = 100 + rand(-25, 25)
    greenRange = 10 + rand(-2.5, 2.5);
    etc...
    

    这只是许多其他可能性之一

    如果你想用公差比较两种颜色,我从fredley的链接中移植了代码,它可以很好地获得两种颜色之间的差异:

    double colorDist(Color e1, Color e2){
      long rmean = ( (long)e1.getRed() + (long)e2.getRed() ) / 2;
      long r = (long)e1.getRed() - (long)e2.getRed();
      long g = (long)e1.getGreen() - (long)e2.getGreen();
      long b = (long)e1.getBlue() - (long)e2.getBlue();
      return Math.sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
    }
    
  2. # 2 楼答案

    比较颜色是not a trivial problem,有各种不同的衡量标准我无法(轻松地)找到一个能做到这一点的库,但如果你进行彻底的搜索,我肯定会找到一些东西。与此同时do some reading!

  3. # 3 楼答案

    what if I want to find similar shades of blue for example?

    我不知道这个技术定义可能意味着什么。不过,您可以使用HSL Color创建自己的定义

    基本上,我想你可以先确定每种颜色的色调是+/-一个固定的度数。然后你可以通过检查饱和度和/或光度是否在你想要的范围内来进一步缩小范围