Java 如何以编程方式向给定颜色添加色调?
我试图用Java实现我的颜色编辑器。它应该是一个简单的软件。用户将以十六进制RGB输入颜色,例如:0xFF00FF。我知道如何计算色调、色度、饱和度和明度,但如何在给定的颜色上增加或减少色调值?这是个谜 有什么算法或公式可以使用吗 现在我使用这个方法,但我认为结果与我用AdobePhotoshop得到的结果不同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
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();
}
// ...
}
对于颜色转换示例代码: