Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java int-颜色仅为蓝色?_Java_User Interface - Fatal编程技术网

Java int-颜色仅为蓝色?

Java int-颜色仅为蓝色?,java,user-interface,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

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

你的窗帘颜色应该从黑色变为蓝色,然后从黑色变为不可见的绿色,再从蓝色变为不可见的绿色

从第一个黑色到蓝色走255步后,它将变成绿色到青色

红色每65536步向上移动一步。从黑色到白色总共需要1670万个蓝色步骤,即65000多个绿色步骤:)


它不仅是蓝色的。很慢:)

你的窗帘颜色应该从黑色变为蓝色,然后从黑色变为不可见的绿色,再从蓝色变为不可见的绿色

从第一个黑色到蓝色走255步后,它将变成绿色到青色

红色每65536步向上移动一步。从黑色到白色总共需要1670万个蓝色步骤,即65000多个绿色步骤:)


它不仅是蓝色的。它很慢:)

RGB int Color是由位(最后三个字节)构成的:

RRRRRRRRGGGGGGBBBBBB

如您所见:

蓝色字节位于整数的0-7位

绿色字节位于整数的8-15位

红色字节位于整数的16-23位

如果你加1,你基本上只需要加1到蓝色,加1到绿色你需要加256,加1到红色你需要加65536

这就是二进制文件的工作原理-整数是一,但用作三个字节,每个字节对应RGB颜色的每个部分

您的代码最终将通过所有颜色的所有阴影,但我认为您希望具有闪烁颜色的效果。在这种情况下,使用HSB 空间

所以你不需要所有颜色的所有阴影,只需要一些代表性的颜色来达到一定的亮度和饱和度。在这种情况下,使用下面的方法生成颜色,输入范围为0.0到1.0 float,负责颜色的部分是色调(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++;
    }
}  

RGB int Color由位(最后三个字节)构成:

RRRRRRRRGGGGGGBBBBBB

如您所见:

蓝色字节位于整数的0-7位

绿色字节位于整数的8-15位

红色字节位于整数的16-23位

如果你加1,你基本上只需要加1到蓝色,加1到绿色你需要加256,加1到红色你需要加65536

这就是二进制文件的工作原理-整数是一,但用作三个字节,每个字节对应RGB颜色的每个部分

您的代码最终将通过所有颜色的所有阴影,但我认为您希望具有闪烁颜色的效果。在这种情况下,使用HSB 空间

所以你不需要所有颜色的所有阴影,只需要一些代表性的颜色来达到一定的亮度和饱和度。在这种情况下,使用下面的方法生成颜色,输入范围为0.0到1.0 float,负责颜色的部分是色调(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++;
    }
}  

谢谢你的回答,但是你对我如何解决这个问题有什么想法吗?改变增量步骤。通过添加
10
而不是
1
,您可以获得几乎相同的结果。我建议使用步长,因为17*15是255,所以您的最终结果正好是蓝色,然后是青色,最后是白色:)谢谢您的回答,但是您对我如何解决这个问题有什么想法吗?更改增量步长。通过添加
10
而不是
1
,您可以获得几乎相同的结果。我建议使用步长,因为17*15是255,因此您最终得到的结果正好是蓝色,然后是青色,最后是白色:)重复向颜色添加1不会得到光谱。你应该在HSL空间中循环使用色调值,并将其转换为RGB。重复向颜色添加1不会得到光谱。你应该在HSL空间中循环使用色调值,并将其转换为RGB。你是一个国王!不客气。记住,如果答案对你有帮助,请接受/投票。你是一个国王!不客气。如果答案对你有帮助,记得接受/投票。