在 java 中使用 HSB 创建平滑渐变
Create smooth gradient with HSB in java
我正在尝试在 greenfoot java 中创建一个排序算法可视化工具,其中一个数组显示为柱状图。我希望它是彩色的,所以我使用了如视频中所示的颜色渐变 https://www.youtube.com/watch?v=qlvBsYyGIDo
这是无效代码:
Pseudocode{
int[50] arr={1,2,3...}
for(int i:arr)
rect.color=getColor(i,arr.length)
}
private static Color getColor(int value, int length){
float h=((float)value/(float)length);//goes from 0-1
System.out.println(value+" "+length+" "+h);
java.awt.Color rgb=java.awt.Color.getHSBColor(h,255,255);
int r=rgb.getRed();
int g=rgb.getGreen();
int b=rgb.getBlue();
System.out.println(rgb+" "+r+" "+g+" "+b);
return new Color(r,g,b);//greenfoot.Color, not java.awt.Color
}
但是它产生的颜色看起来像这样:
如何创建平滑渐变,从红色->黄色->绿色->青色->蓝色->洋红色?
谢谢@Thomas。结果 Color.getHSBColor() 的所有三个值都在 0-1 范围内,高于该值的值会产生 ~undefined behavior~。
我正在尝试在 greenfoot java 中创建一个排序算法可视化工具,其中一个数组显示为柱状图。我希望它是彩色的,所以我使用了如视频中所示的颜色渐变 https://www.youtube.com/watch?v=qlvBsYyGIDo
这是无效代码:
Pseudocode{
int[50] arr={1,2,3...}
for(int i:arr)
rect.color=getColor(i,arr.length)
}
private static Color getColor(int value, int length){
float h=((float)value/(float)length);//goes from 0-1
System.out.println(value+" "+length+" "+h);
java.awt.Color rgb=java.awt.Color.getHSBColor(h,255,255);
int r=rgb.getRed();
int g=rgb.getGreen();
int b=rgb.getBlue();
System.out.println(rgb+" "+r+" "+g+" "+b);
return new Color(r,g,b);//greenfoot.Color, not java.awt.Color
}
但是它产生的颜色看起来像这样:
如何创建平滑渐变,从红色->黄色->绿色->青色->蓝色->洋红色?
谢谢@Thomas。结果 Color.getHSBColor() 的所有三个值都在 0-1 范围内,高于该值的值会产生 ~undefined behavior~。