【问题标题】:Changing color components in Java在 Java 中更改颜色组件
【发布时间】:2026-02-13 16:10:01
【问题描述】:

有没有办法改变 Java 图形编程中的单个颜色分量(除了 brighter() 和 darker() 方法?例如,如果我创建一个带有 r、g、b 颜色分量的 Color 对象,然后希望修改其中一个有没有办法这样做?

Color x = new Color(255,0,0);

有没有办法快速更改单个颜色组件之一?

【问题讨论】:

  • 我尝试将变量设置为 rgb 组件并使用 getRed()、getBlue() 和 getGreen(),但 java 给我一个错误
  • 对于颜色,你最终总是会创建一个新的颜色对象,因为颜色总是由构造函数定义的。这也是 brighter() 和 darker() 方法在内部工作的方式。

标签: java graphics colors components rgb


【解决方案1】:

您实际上无法更改现有的 Color 对象。要拥有不同的颜色,您必须创建另一个 Color 对象,因为该对象始终由构造函数值定义。这也是 darker() 和 brighter() 在内部实现的方式。看看

public Color brighter() {
    int r = getRed();
    int g = getGreen();
    int b = getBlue();
    int alpha = getAlpha();

    /* From 2D group:
     * 1. black.brighter() should return grey
     * 2. applying brighter to blue will always return blue, brighter
     * 3. non pure color (non zero rgb) will eventually return white
     */
    int i = (int)(1.0/(1.0-FACTOR));
    if ( r == 0 && g == 0 && b == 0) {
        return new Color(i, i, i, alpha);
    }
    if ( r > 0 && r < i ) r = i;
    if ( g > 0 && g < i ) g = i;
    if ( b > 0 && b < i ) b = i;

    return new Color(Math.min((int)(r/FACTOR), 255),
                     Math.min((int)(g/FACTOR), 255),
                     Math.min((int)(b/FACTOR), 255),
                     alpha);
}

public Color darker() {
    return new Color(Math.max((int)(getRed()  *FACTOR), 0),
                     Math.max((int)(getGreen()*FACTOR), 0),
                     Math.max((int)(getBlue() *FACTOR), 0),
                     getAlpha());
}

【讨论】: