Java int - 颜色只有蓝色?

时间:2016-10-16 09:46:33

标签: java user-interface

我希望在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++;
    }
}   

2 个答案:

答案 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++;
    }
}