我希望在Java应用程序循环中有一个背景,可以顺畅地通过所有光谱颜色。我决定使用整数来定义颜色,这样每次绘制颜色时我都可以添加1。问题是每次我添加1它只穿过蓝色阴影。有什么帮助吗?
package Snake;
import javax.swing.*;
import java.awt.*;
/**
* Created by Alex **** on 02/10/2016.
*/
public class RenderPanel extends JPanel{
public int curColor = 0;
// @Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(new Color(curColor));
g.fillRect(0, 0, 800, 700);
curColor++;
}
}
答案 0 :(得分:2)
你的窗帘颜色应该从黑色变为蓝色,然后从黑色变为绿色到蓝色,并带有一个看不见的绿色。
从第一个黑色到蓝色的255步之后,它将变为绿色到青色。
红色每65536个蓝色步骤上升一步。总共需要大约1670万个蓝色台阶,即超过65000个绿色台阶,从黑色到白色:)
它不仅仅是蓝色的。它只是很慢:))
答案 1 :(得分:2)
RGB int Color由位(最后三个字节)构成:
RRRRRRRR GGGGGGGG BBBBBBBB
正如您所见:
蓝色字节位于0到7位的整数位置。
绿色字节位于整数的8 - 15位。
红色字节位于整数的16 - 23位。
如果你加1,你基本上只需要添加1到蓝色,要添加1到绿色你需要添加256,要添加1到红色你需要添加65536。
这些只是二进制文件的工作方式 - int数是1,但是用作三个字节,每个字节用于RGB颜色的每个部分。
您的代码最终将贯穿所有颜色的所有色调,但我认为您希望拥有闪烁色彩的效果。在这种情况下使用HSB 空间。
因此,您并不需要所有颜色的所有色调,而只需要一些代表性的颜色,以达到某种程度的亮度和饱和度。在这种情况下,使用下面的方法生成颜色,输入范围从0.0到1.0浮点数,负责颜色的部分是hue(h)参数。
Color.getHSBColor(h, s, b)
所以它可能是:
package Snake;
import javax.swing.*;
import java.awt.*;
/**
* Created by Alex **** on 02/10/2016.
*/
public class RenderPanel extends JPanel{
public int curColor = 0;
// @Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.getHSBColor((curColor%256)/256f, 0.5f, 0.5f));
g.fillRect(0, 0, 800, 700);
curColor++;
}
}