Erhalten insgesamt Anzahl der schwarzen und weißen Pixel im bitmap-Bild separat
Bin ich zu schreiben versucht, einen code, der geht durch mein Bild an und zählt alle Pixel Zeile für Zeile und sagt mir, wie viele weiße und wie viele schwarze Pixel in meinem Bild? (Vorausgesetzt, mein Bild ist aus einem schwarzen Zeichen auf weißem hintergrund)
var backgroundPixels = 0;
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
if (bmp.GetPixel(x, y).Equals(Color.White))
{
backgroundPixels++;
}
}
}
label3.Text = Convert.ToString(backgroundPixels);
Ich habe ein problem, da der code nicht aus irgendeinem Grund arbeiten. Kann jemand mir bitte helfen?
- Ich habe deine bearbeiteten Titel. Bitte sehen, "Sollte Fragen enthalten "tags" in Ihren Titel?", wo der Konsens ist ", Nein, Sie sollten nicht".
- Könnten Sie beschreiben mehr im detail, was die aktuell beobachtete Verhalten ist, dann?
- Was meinst du mit "funktioniert nicht"? Stuerzt es ab? Tun die Werte nicht dem entsprechen, was es eigentlich gibt? Tut es nicht analysieren sämtliche Pixel?
- Versuchen Sie es mit
R
G
undB
vonbmp.GetPixel(x, y)
- hat das "funktioniert nicht" einige Namen? sagen Ausnahme?
- Können Sie spielen ein bisschen mit MS Paint und erstellen Sie ein Steuerelement Bild, um zu sehen, ob es wirklich alle Pixel iteriert und wenn die Werte korrekt erhöht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
==
oderEquals
Sie nicht vergleichen den Wert von ARGB-byte für byte, weil die '= = ' - operator ist wie folgtfolgenden ist, wie erfolgt die
Equals
Methode .netzur überwindung Ihres Problems sollten Sie wandeln auf ARGB mit dem
ToArgb()
Funktion, die das senden von 32-bit-Version der aktuellen FarbeEs funktioniert nicht, weil du vergleichst, Farbe structs:
"Name" Mitglied der Struktur ist nicht "Weiß" auf Ihre pixel, es wird ein string mit dem hex-Wert "ffffff", also die Objekte unterschiedlich sind, obwohl die ARGB-Werte sind die gleichen. Sie müssen vergleichen, der ARGB-Werte. Die Farbe, die Struktur ist doof so was.
Die andere Möglichkeit ist, dass deine Pixel sind nicht wirklich schwarz und weiß, sondern Graustufen.
Den
Equals()
Methode vergleicht mehr als nur Ihr ARGB-Farbe.Dies bedeutet, dass eine Farbe mit RGB=0,0,0 (schwarz) ist nicht das gleiche wie
Color.Black
.Versuchen Sie, die folgenden zu vergleichen:
oder