Java 如何以编程方式向给定颜色添加色调?

Java 如何以编程方式向给定颜色添加色调?,java,colors,rgb,hsv,Java,Colors,Rgb,Hsv,我试图用Java实现我的颜色编辑器。它应该是一个简单的软件。用户将以十六进制RGB输入颜色,例如:0xFF00FF。我知道如何计算色调、色度、饱和度和明度,但如何在给定的颜色上增加或减少色调值?这是个谜 有什么算法或公式可以使用吗 现在我使用这个方法,但我认为结果与我用AdobePhotoshop得到的结果不同 public void addHue(float addHue) { float c = getChroma(); addHue %= 6; if (addHue

我试图用Java实现我的颜色编辑器。它应该是一个简单的软件。用户将以十六进制RGB输入颜色,例如:0xFF00FF。我知道如何计算色调、色度、饱和度和明度,但如何在给定的颜色上增加或减少色调值?这是个谜

有什么算法或公式可以使用吗

现在我使用这个方法,但我认为结果与我用AdobePhotoshop得到的结果不同

public void addHue(float addHue) {
    float c = getChroma();
    addHue %= 6;
    if (addHue < 2) {
        float n = 1 - green;
        green = green + addHue * n;
    } else if (addHue < 4) {
        addHue -= 2;
        float n = 1 - blue;
        blue = blue + addHue * n;
    } else if (addHue < 6) {
        addHue -=4;
        float n = 1 - red;
        red = red + addHue * n;
    }
    if (green > 1) green = 1;
    else if (green < 0) green = 0;
    if (red > 1) red = 1;
    else if (red < 0) red = 0;
    if (blue > 1) blue = 1;
    else if (blue < 0) blue = 0;
}
public void addHue(float addHue){
float c=getChroma();
addHue%=6;
if(addHue<2){
浮点数n=1-绿色;
绿色=绿色+色调*n;
}否则如果(添加色调<4){
addHue-=2;
浮点数n=1-蓝色;
蓝色=蓝色+色调*n;
}否则如果(添加色调<6){
addHue-=4;
浮点数n=1-红色;
红色=红色+附加色调*n;
}
如果(绿色>1)绿色=1;
否则,如果(绿色<0)绿色=0;
如果(红色>1)红色=1;
否则,如果(红色<0)红色=0;
如果(蓝色>1)蓝色=1;
否则,如果(蓝色<0)蓝色=0;
}

这门课可以帮上忙。

我真的不明白你把两种颜色加在一起想要达到什么效果

色调是一个角度,给出你所代表的颜色的“色调”。如果以度为单位,色调将在[0,360]范围内。此外,45和405的值将表示相同的色调

当你想要操纵色调时,你必须考虑到这一点。也就是说,你想要平均两个值,例如355和5,正确的结果可以是0(画一个圆,取这两个值之间的最小半角)或180(最大半角)


我是如何在Android上(它没有颜色操纵实用程序)创建自己的颜色类来存储颜色的表示(rgb和hsv)

然后我有一些方法可以设置RGB或HSV。添加到相同的颜色空间是很简单的。然后每次调用这些方法时,我分别调用updateHSV或updateRGB方法,从新值计算颜色分量

class Color {
  float[] hsv;
  float[] rgb;

  public void setRgb(float[] rgb) {
    System.arraycopy(rgb, 0, this.rgb, 0, 3);
    computeHsvFromRgb();
  }

  public void setHsv(float[] hsv) {
    System.arraycopy(hsv, 0, this.hsv, 0, 3);
    computeRgbFromHsv();
  }

  // ...
}
对于颜色转换示例代码:


为什么要添加色调?你想实现什么?这是一个用户控件吗?谢谢你的关注MarvinLabs。我真正想问的是,“如何向给定颜色添加或减去色调值”。我有一种颜色,例如黄色的#FFFFFF00。如何向我的颜色添加色调,例如45(#FFFF00)。我应该向红色部分、绿色部分和蓝色部分添加/减去什么值?想法是始终更新颜色的两种表示形式。这样您可以设置RGB,然后操纵HSV,最后返回RGB。请参见编辑后的答案。嗨,马文,谢谢您的回复。我想computeHsvFromRgb()和computeRgbFromHsv();是我所需要的。你为什么不分享它呢?这是一个秘密公式吗?没有什么秘密,只是很容易用谷歌找到(见编辑后的答案)嗨,大卫,不幸的是,我不能这样做。我试图将此实现到一个J2ME项目中。但谢谢你的关注。