我正在创建一些自定义 Swing 组件,我希望它们从一种颜色淡入另一种颜色。目前我正在从 RGB 转换为 HSB,然后递增 Hue 值并在绘画之前转换回 RGB,工作正常。
但是,这会循环遍历所有颜色(即尝试从蓝色逐渐淡入绿色,循环经过黄色、橙色、红色等)。是否有一种合适的算法/方法可以直接从一种颜色淡入另一种颜色?
编辑:我已经通过 Swing Timer 对其进行了更新(我尽量避免像瘟疫一样接触带有线程的组件)。今晚我会尝试听取您的建议,谢谢大家!
最佳答案
基于此example , Queue<Color>
以下循环来自 Color.green
至 Color.blue
回到Color.green
再次在 N = 32
脚步。注意 Color.green
在数值上小于 Color.blue
在 HSB 模型中。另见此相关 example使用 HSB。
public Flash(JComponent component) {
this.component = component;
float gHue = Color.RGBtoHSB(0, 1, 0, null)[0];
float bHue = Color.RGBtoHSB(0, 0, 1, null)[0];
for (int i = 0; i < N; i++) {
clut.add(Color.getHSBColor(gHue + (i * (bHue - gHue) / N), 1, 1));
}
for (int i = 0; i < N; i++) {
clut.add(Color.getHSBColor(bHue - (i * (bHue - gHue) / N), 1, 1));
}
}
关于java - 褪色算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223065/