首页 > 解决方案 > 在java中使用HSB创建平滑渐变

问题描述

我正在尝试在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
}

但它产生的颜色看起来像这样: 生成的矩形屏幕截图

如何从红色->黄色->绿色->青色->蓝色->洋红色创建平滑渐变?

标签: javacolorsawtgreenfoot

解决方案


谢谢@Thomas。结果是 Color.getHSBColor() 的所有三个值都在 0-1 范围内,高于该值的值会产生〜未定义的行为〜。


推荐阅读