在Java中将暗色转换为亮色

5

我正在开发一个程序,从图像的一部分中获取RGB值。我想要去除颜色中的黑暗并使其变亮。我的做法是使用Color.RGBtoHSB函数,然后取亮度通道并将其设置为范围内可以达到的最高值,再将HSB转换回RGB。然而,当我这样做时,颜色完全改变了。以下是一个例子,将深红色变成紫色以及我用来实现这一点的代码:

System.out.println("Before Conversion:");
System.out.println("R: " + rAvg  + "\nG :" + gAvg + "\nB :" + bAvg);
Color.RGBtoHSB(rAvg, gAvg, bAvg, hsv);

hsv[2] = 100; //Set to max value
System.out.println("H: " + hsv[0] * 360 + "\nS: " +  hsv[1] * 100 + "\nV :" + hsv[2]);

int rgb = Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]);
System.out.println("After conversion");
Color color = new Color(rgb);
System.out.println("R: " + color.getRed());
System.out.println("G: " + color.getGreen());
System.out.println("B: " + color.getBlue());

输出:

Before Conversion:
R: 128
G :39
B :50
H: 352.58426
S: 69.53125
V :100.0
After conversion
R: 158
G: 126
B: 233
1个回答

2

亮度值 hsv[2] 需要在0到1之间。尝试使用以下两行代码:

    hsv[2] = 1; //Set to max value
    System.out.println("H: " + hsv[0] * 360 + "\nS: " +  hsv[1] * 100 + "\nV :" + hsv[2] * 100);

工作得像魔术一样。我有正确的想法,只是数字错了:/ 这有点烦人。谢谢你的帮助 :) - cuber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接