Durchschnittsfarbe eines Bildes
Verfasst: 29.01.2023 21:55
Aus den grafischen Betriebssystemen kennt man mitunter den Vorgang, ein Bild - gleich welcher Größe - auf eine Durchschnittsfarbe zu reduzieren und dann mit dieser Farbe etwas zu tun. Beispielsweilse kann die Windows 10 Benutzeroberfläche mit der Durchschnittsfarbe des Desktop-Wallpapers die grafischen Elemente farblich ausstatten.
In aller Regel kann man mit einem Befehl wie ResizeImage () oder durch Verwendung einfacher Grafiksoftware den "Farbdurchschnitt" eines beliebigen Bildes errechnen lassen indem man es auf Größe 1x1 runterrechnen lässt. (Wenn mein Bild zum Beispiel die Größe 2x1 hat und aus einem weißen und einem schwarzen Pixel besteht, ergibt das 1x1 Durchschnittspixel exakt grau=127,127,127)
Das kann bei großen Bildern dann auch etwas dauern, aber mich interessiert, wie solch eine Berechnung auf Bildgröße 1x1 technisch funktioniert. Der Computer kann vermutlich nicht alle Pixel aufsummieren und dann den Durchschnittswert ziehen. Die Formel Summe (aller Pixelwerte) durch Anzahl (aller Pixel) kann man verwenden wenn man aus Bytes ein Quad errechnet, aber wie geht das wenn beliebig viele Pixel im Bitmap liegen?
Vielleicht taugen Floats bzw. Doubles dazu... ich habe das nicht getestet und wollte hier erstmal um Rat fragen. Wäre es technisch in Ordnung, eine Fließkommazahl als Träger für die Summe (aller Farbwerte) zu verwenden und den Wert dann durch die Anzahl der Pixel zu dividieren?
Klar, das dabei red/green/blue unterschieden werden muss... einfacher geht es eben mit Graustufen. Da liegen alle Pixel zwischen 0 und 255 bzw. -128 und 127 ... aber taugen Fließkommazahlen zu so etwas oder verlässt uns da die Genauigkeit? Was wäre sonst ein besserer Weg?
In aller Regel kann man mit einem Befehl wie ResizeImage () oder durch Verwendung einfacher Grafiksoftware den "Farbdurchschnitt" eines beliebigen Bildes errechnen lassen indem man es auf Größe 1x1 runterrechnen lässt. (Wenn mein Bild zum Beispiel die Größe 2x1 hat und aus einem weißen und einem schwarzen Pixel besteht, ergibt das 1x1 Durchschnittspixel exakt grau=127,127,127)
Das kann bei großen Bildern dann auch etwas dauern, aber mich interessiert, wie solch eine Berechnung auf Bildgröße 1x1 technisch funktioniert. Der Computer kann vermutlich nicht alle Pixel aufsummieren und dann den Durchschnittswert ziehen. Die Formel Summe (aller Pixelwerte) durch Anzahl (aller Pixel) kann man verwenden wenn man aus Bytes ein Quad errechnet, aber wie geht das wenn beliebig viele Pixel im Bitmap liegen?
Vielleicht taugen Floats bzw. Doubles dazu... ich habe das nicht getestet und wollte hier erstmal um Rat fragen. Wäre es technisch in Ordnung, eine Fließkommazahl als Träger für die Summe (aller Farbwerte) zu verwenden und den Wert dann durch die Anzahl der Pixel zu dividieren?
Klar, das dabei red/green/blue unterschieden werden muss... einfacher geht es eben mit Graustufen. Da liegen alle Pixel zwischen 0 und 255 bzw. -128 und 127 ... aber taugen Fließkommazahlen zu so etwas oder verlässt uns da die Genauigkeit? Was wäre sonst ein besserer Weg?