2011-03-22 56 views
2

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

是否有任何算法或公式可供使用?

现在我使用这种方法,但我认为结果与Adobe Photoshop有所不同。

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; 
} 
+0

你为什么要添加色相?你想达到什么目的?这是一个用户控件吗? – 2011-03-22 09:20:42

回答

1

java.awt.Color类可以帮助这个。

+0

嗨大卫,很遗憾我不能那样做。我试图将这个实现到一个J2ME项目中。但感谢您的关注。 – 2011-03-24 04:15:20

1

我不明白你试图通过将两种色调加在一起来实现。

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

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


我怎么做的在Android(不具有彩色操作实用程序)是创建一个存储彩色(RGB和HSV)的两种表示我自己的颜色类。

然后我有方法可以设置RGB或设置单纯疱疹病毒。添加相同的颜色空间是微不足道的。然后每次调用这些方法时,我分别调用一个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(); 
    } 

    // ... 
} 

对于彩色皈依示例代码:

+0

感谢您的关注MarvinLabs。我真正要问的是,“如何增加或减少色调值给定颜色”。我有一个颜色,例如#FFFF00是黄色的。如何添加色调,例如45添加到我的颜色(#FFFF00)。我应该增加/减少红色部分,绿色部分和蓝色部分的值? – 2011-03-24 04:13:59

+1

想法是始终保持颜色的两种表示形式都已更新。所以你可以设置RGB,然后操纵HSV,最后返回RGB。见编辑的答案。 – 2011-03-24 09:37:29

+0

嗨马文,谢谢你的回复。我认为computeHsvFromRgb();和computeRgbFromHsv();是我需要的。你为什么不分享它?这是一个秘密公式吗? – 2011-05-26 08:38:02

相关问题