Helmuth:
Alle Effekte, die ich bisher geschrieben habe, funktionieren in einem Array: CRGB leds[NUM_LEDS]
Hast Du schon mal über Effekte nachgedacht, die Du im HSV-Farbraum statt im RGB-Farbraum generierst? Die FastSPI_LED2 Library unterstützt auch modifizierte HSV-Farbräume, bei denen als "V" der Hellwert vorgegeben werden kann:
Und falls Du bei RGB bleiben möchtest:
Wenn ich mich nicht täusche, bringt die FastSPI_LED2 Library auch schnelle Umrechnungsfunktionen zwischen RGB und HSV mit, so dass sich im Zweifelsfall ein bestimmter Farbwert auf eine gewünschte Helligkeit bringen läßt, indem man:
- den originalen RGB-Wert in einen HSV-Wert umrechnet
- den Hellwert V im HSV-Wert auf die gewünschte Helligkeit setzt
- den in der Helligkeit modifizierten HSV-Wert wieder zurück in RGB umwandelt
Helmuth:
Hinter "durchschnittliche Helligkeit" (bright) feststellen steckt die Idee, dass sich viele weiße Pixel in einem relativ hohen bright Wert wiederspiegeln. Und mein Ansatz ist, in Abhängigkeit von bright (vor/nach dem addieren) mehr oder weniger stark runterzuskalieren, um in Abhängigkeit vom momentanen Bildinhalt und dem zu erwartenden Ergebnis nach der nächsten Addition dynamisch gegenzusteuern - so, dass das Ergebnis nicht zu dunkel (schwache Farben) und nicht zu hell (weiß) wird.
Wenn es nur um die Vermeidung übermäßig heller Pixel geht, dann wäre meine Idee: Immer dann, wenn ein Pixel droht weiß zu werden, einfach die Helligkeit halbieren.
byte r,g,b;
...
if ((int)r+g+b>612) // Werte als Integer zusammenzählen, 612 ist 80% vom Weißwert 765
{
r= r>>1;
g= g>>1;
b= b>>1;
}