[英]How to make gradient color white - brown - green using Java Color
I am trying to make gradiend colour between : 我正在尝试使渐变颜色之间:
White (light to dark)
Brown (dark to light
Green (dark to ligh)
But I don't know how to implement it. 但我不知道如何实现它。
My attempt was terrible, and so I ask you for help. 我的尝试很可怕,所以我请求你帮忙。
My try: 我的尝试:
for (int i = 255; i > 0; i--) {
if (i > 230) {
g2.setColor(new Color(0 + i, 0 + i, 0 + i));
} else if (i <= 230 && i > 180) {
g2.setColor(new Color(139 - (255 - i), 89 - (255 - i), 19));
} else if (i <= 180 && i > 79) {
g2.setColor(new Color(0, 60 + (180 - i), 0));
} else {
g2.setColor(Color.blue);
}
g2.drawLine(0, 255 - i, 500, 255 - i);
}
Look: 看:
Thank you for any help! 感谢您的任何帮助!
I think it should be a kind of: 我认为它应该是一种:
for (int i = 255; i > 0; i--) {
float h;
float s;
float v;
if (i > 230) {
h = 0; // gray
s = 0;
v = 1f * i / 255;
} else if (i <= 230 && i > 180) {
h = 0.1; // brown
s = 0.8;
v = 1f * (230 - i) / (230 - 180);
} else if (i <= 180 && i > 79) {
h = 0.33; // green
s = 1f;
v = 1f * (180 - i) / (180 - 79);
} else {
h = 0.62; // blue
s = 1f;
v = 1f;
}
g2.setColor(new Color(Color.HSBtoRGB(h, s, v)));
g2.drawLine(0, 255 - i, 500, 255 - i);
}
The idea is to operate in HSV color space instead of RGB, where H (hue) and S (saturation) components determine position at color sircle, and V determines "value"--how far is the color from black point. 我们的想法是在HSV颜色空间而不是RGB中操作,其中H(色调)和S(饱和度)分量确定颜色的位置,V确定“值” - 颜色与黑点的距离。 So, you fix H and S components and vary V to make a color lighter or darker.
因此,您可以修复H和S分量并改变V以使颜色变浅或变暗。
See: https://docs.oracle.com/javase/8/docs/api/java/awt/Color.html#HSBtoRGB-float-float-float- 请参阅: https : //docs.oracle.com/javase/8/docs/api/java/awt/Color.html#HSBtoRGB-float-float-float-
If you find more appropriate h
and s
constants for each color, feel free to comment/edit. 如果您为每种颜色找到更合适的
h
和s
常量,请随意评论/编辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.