# Textur färben



## Lyras (20. Okt 2016)

Hallo,

ich bin schon wieder hier mit einer etwas größeren Herausforderung.
Und zwar:

Ich habe eine Texture, welche für meinen eigenen "Ladebalken" ist. Da ich aber nicht für verschiedene Farben eigene Texturen machen will, habe ich eine Funktion geschrieben, die das neben dem Rendern auch noch einfärben soll. Es geht hierbei nur um das Einfärben, denn das Rendern funktioniert.

Ich möchte nun als Parameter z.B. die Farbe 0xFFFF0000 übergeben, womit die Texture rot sein sollte. Zusätzlich dazu sollen die Stellen, die in der Originaltextur dunkler sind auch dunkler sein.

Im Prizip soll dann ein Effekt entstehen, wie wenn ich bei GIMP eine Stelle einfärbt. Das funktioniert teilweise und ich habe es auch bisher eher ausprobiert, als wirklich etwas Handfestes zu haben.

Welche Gleichungen muss ich da nutzen bzw. kann mir jemand einen Denkanstoß geben, wie diese Herausforderung zu absolvieren ist?

MFG ~ Lyras


----------



## Times (21. Okt 2016)

Deine OriginalTextur ist in Schwarz/Weiss/Grau?

Dann kannst du dir von jedem Pixel die Graustufe holen:

```
BufferedImage img; // Hier deine Textur einlesen
int rgb = img.getRGB(x, y);
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = (rgb & 0xFF);
int gray = (r + g + b) / 3;
```

Damit es folglich einfacher wird wandelst du diesen in einen Wert zwischen 0 und 1 um, also:

```
float fGrayScale = gray / 255f;
```

Nun multiplizierst du nurnoch jeweils r, g, b der neuen Farbe mit der fGrayScale und setzt die Farbe an die jeweile Position.

Nun ich weiss nicht ob es einfacher geht, das ist zumindest ein Weg der vielleicht funktionieren würde
(Habe so etwas selber noch nie gemacht)

Viel Glück weiterhin


----------

