# Farbe heller machen



## KocksundNuts (21. Mai 2010)

Hallo,

mein Problem ist es. Ich habe JLabels, wo ich die Transparenz ausgeschaltet habe. Diese JLabels besitzen eine Farbe. Nun möchte ich das diese Farbe um z.B. 20 oder 10 Abstufungen heller wird. Hab schon was von AlphaComposite gelesen. Das Problem ist aber, dass diese nicht auf JLabels anwendbar sind. 
Gibt es eine Methode? oder wie kann ich das am besten realisieren?
die Farbe ist z.b. 

Color col = new Color(255,250,225);
Daraus soll jetzt 10 oder 20 hellere Farben entstehen!


----------



## L-ectron-X (21. Mai 2010)

Die einfachste Variante ist 

```
col.brighter();
```


----------



## KocksundNuts (21. Mai 2010)

dies habe ich schon ausprobiert, leider sind die Abstufungen zu groß
immoment mache ich dies nach dieser Methode:


```
if(counter>=1) {
switch(counter) {
     case 1: color = new Color(255,250,225); break;
     case 2: color = new Color(255,245,200); break;
     case 3: color = new Color(255,240,175); break;
     case 4: color = new Color(255,235,150); break;
     case 5: color = new Color(255,230,125); break;
     case 6: color = new Color(255,225,100); break;
     case 7: color = new Color(255,220,75); break;
     case 8: color = new Color(255,215,50); break;
     case 9: color = new Color(255,210,25); break;
     default: color = new Color(255,205,0);
}
```


----------



## Marco13 (21. Mai 2010)

Das ist eigentlich OK, wenn es in einer kleinen statischen Hilfsmethode steht. Ansonsten könnte man noch sowas machen wie

```
Color brighter(Color c, float factor)
{
    int r = c.getRed();
    int g = c.getGreen();
    int b = c.getBlue();
    r = (int)(r * factor);
    g = (int)(g * factor);
    b = (int)(b * factor);
    r = Math.min(255,r);
    g = Math.min(255,g);
    b = Math.min(255,b);
    return new Color(r,g,b);
}
```
oder irgenwas ganz sophisticatetes (und so gesehen "genaueres" in Bezug auf das Ziel, NUR die Helligkeit zu erhöhen) was dann über die Umwandlung in HSB laufen würde, Pseudocode

```
Color brighter(Color c, float factor)
{
    float hsb[] = new float[3]
    Color.RGBtoHSB(c, hsb);
    hsb[2] *= factor;
    hsb[2] = Math.min(1.0f, hsb[2]);
    int rgb = Color.HSBtoRGB(hsb);
    return new Color(rgb);
}
```


----------



## KocksundNuts (21. Mai 2010)

danke,
das mit RGBtoHSB und umgekehrt, war auch mein gedanke, nun klappt es!


----------

