如何在java swing应用程序中修改颜色强度

时间:2014-09-06 19:25:43

标签: java swing colors brightness

我正在使用java swing来创建一个用户绘制几个点的界面。我想要做的是在绘制这些点后自动改变颜色的强度,从真正的亮到暗,直到该点消失。有没有人知道如何改变颜色强度的任何教程,因为我找不到帮助我的东西。

编辑:感谢您的回答,他们帮助我更好地了解如何使用Color类。我修复它所以我上传线程部分以帮助,如果任何人都需要做类似的事情...我在黑色背景上工作,所以我变暗颜色而不是减轻它们。

public class MyThread extends Thread {

    private Canvas canvas;
    private int sleepingTime = 5000;
    private Color color;
    private int red, green, blue, alpha;

    public MyThread(Canvas canvas) {
        super();
        this.canvas = canvas;
        setDaemon(true);

    }

    public void run(){
        while (true){
            try {
                System.out.println("going to sleep...");
                Thread.sleep(sleepingTime);

            } catch (InterruptedException e) {
                System.out.println("sleep interrupted..");
                return;
            }
            System.out.println("woke up!");
                int size = canvas.points_list.size();
                int i =0;
                while (size > 0) {
                    color = canvas.points_list.get(i).getForeground();

                    red = (int) Math.round(Math.max(0, color.getRed() - 255 * 0.25f));
                    green = (int) Math.round(Math.max(0, color.getGreen() - 255 * 0.25f));
                    blue = (int) Math.round(Math.max(0, color.getBlue() - 255 * 0.25f));

                    alpha = color.getAlpha();

                    canvas.points_list.get(i).setForeground(new Color(red, green, blue, alpha));
                    size--; 
                    i++;
                }

                canvas.repaint();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

你需要使用RGB形式通过添加蓝色和绿色并保持红色值相同来使其成为从亮到暗的渐变,在for循环中连续执行此操作然后在结束时将其设置为背景颜色让它看不见。

答案 1 :(得分:0)

看一下HSB颜色模型。它允许您指定“强度”(饱和度和亮度)。

示例(红色背景变为黑色 - 或者,修改“s”参数以将颜色淡化为白色):

final Frame frame = new Frame();

Timer timer = new Timer(500, new ActionListener() {

    float b = 1.0f;

    @Override
    public void actionPerformed(ActionEvent e) {
        int color = Color.HSBtoRGB(0, 1, b);
        frame.setBackground(new Color(color));

        b -= 0.05f;
    }
});
timer.start();

frame.setSize(200, 200);
frame.setVisible(true);