Java int-颜色仅为蓝色?
我希望在java应用程序中有一个背景,可以平滑地遍历所有光谱颜色。我决定使用整数来定义颜色,这样每次它绘制颜色时,我就可以向它添加1。问题是每次我加1,它只会穿过蓝色的阴影。有什么帮助吗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
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。你是一个国王!不客气。记住,如果答案对你有帮助,请接受/投票。你是一个国王!不客气。如果答案对你有帮助,记得接受/投票。