So berechnen Sie den Durchschnitt der rgb-Farbwerte der bitmap
In meinem C# (3.5) Anwendung, die ich brauche, um die durchschnittlichen Farbwerte für rot -, grün-und blau-Kanälen eines Bildes. Vorzugsweise ohne Verwendung einer externen Bibliothek. Kann das getan werden? Wenn ja, wie? Vielen Dank im Voraus.
Versuchen, die Dinge etwas genauer: Jedes pixel in der bitmap einen bestimmten RGB-Farbwert. Ich würde gerne den Durchschnitt der RGB-Werte für alle Pixel im Bild.
InformationsquelleAutor der Frage Mats | 2009-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Schnellste Weg ist durch die Verwendung von unsicherem code:
Achtung: ich habe nicht diesen code testen... (vielleicht habe ich einige Ecken schneiden)
Dieser code auch asssumes ein 32-bit-Bild. Für 24-bit-Bilder. Ändern Sie die x*4 zu x*3
InformationsquelleAutor der Antwort Philippe Leybaert
Hier ist eine viel einfachere Möglichkeit:
Grundsätzlich DrawImage verwenden, kopieren Sie die original-Bitmap in ein 1-pixel-Bitmap. Die RGB-Werte, die 1 pixel ist dann stellen die Durchschnittswerte für die gesamte ursprüngliche. GetPixel ist relativ langsam, aber auch nur, wenn Sie es auf eine große Bitmap, pixel-by-pixel. Nenne es einmal hier ist kein biggie.
Mithilfe der LockBits ist in der Tat schnell, aber einige Windows-Benutzer haben Sicherheitsrichtlinien, die verhindern, dass die Ausführung von "unsafe" - code. Ich erwähne das, weil diese Tatsache nur mich etwas auf den hinter, vor kurzem.
Update: mit InterpolationMode eingestellt HighQualityBicubic, diese Methode dauert etwa doppelt so lange wie die Mittelwertbildung mit LockBits; mit HighQualityBilinear, es dauert nur etwas länger als die LockBits. So, es sei denn, Ihre Benutzer haben eine security-Richtlinie, die verbietet
unsafe
code, auf jeden Fall nicht verwenden, meine Methode.Update 2: mit dem Lauf der Zeit, jetzt weiß ich, warum dieser Ansatz funktioniert nicht bei allen. Auch die höchste Qualität der interpolation-algorithmen zu integrieren, nur ein paar benachbarte Pixel, so gibt es ein limit, wie viel ein Bild kann gequetscht nach unten, ohne Informationen zu verlieren. Und die quetschen ein Bild auf ein pixel ist auch über diese Grenze hinausgehen, egal, welchen Algorithmus Sie verwenden.
Der einzige Weg, dies zu tun wäre die zum verkleinern des Bildes in den Schritten (vielleicht schrumpft es auf die Hälfte jedes mal), bis Sie es nach unten, um die Größe von einem pixel. Ich kann nicht Ausdrücken, in wenigen Worten, was eine völlige Verschwendung von Zeit für das schreiben etwas wie dieses wäre, so bin ich froh, dass ich hielt mich zurück, als ich dachte. 🙂
Bitte, niemand Stimmen für diese Antwort mehr - es könnte meine dümmste Idee jemals.
InformationsquelleAutor der Antwort MusiGenesis
Diese Art der Sache wird funktionieren, aber es kann nicht schnell genug sein werden, nützlich.
InformationsquelleAutor der Antwort Loofer