So Ändern Sie die Pixelfarbe des Bildes in C#.NET
Arbeite ich mit Bildern in Java, die ich entworfen mehr als 100+ Bilder(.png) - format, Sie waren alle Trasparent und Schwarze Farbe, Zeichnung.
Das problem ist, Jetzt habe ich gefragt worden, ändern Sie die Farbe der Zeichnung (Schwarz ).
Den ich gesucht habe viele code-snipped bei google,dass die änderungen der Bitmap - (Pixel) des Bildes, aber ich bin nicht zu raten, was ich tun muss, um zu entsprechen den genauen pixel und ersetzen speziell, wenn die Bilder, wenn im Transparent-Modus.
Unten ist der code .Net (C#)
Bitmap newBitmap = new Bitmap(scrBitmap.Width, scrBitmap.Height);
for (int i = 0; i < scrBitmap.Width; i++)
{
for (int j = 0; j < scrBitmap.Height; j++)
{
originalColor = scrBitmap.GetPixel(i, j);
if(originalColor = Color.Black)
newBitmap.SetPixel(i, j, Color.Red);
}
}
return newBitmap;
aber es war nicht passend an alle, ich ausgetestet es, in der gesamten Datei, es gab keinen Wert der Rot -, Grün -, Blau-Parametern von Farbe (originalColor) variable.
Jemand helfen kann?
InformationsquelleAutor der Frage Bibi Tahira | 2013-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Lösung, die ich getan habe, mit Pixel.
Anbringen der source-code, so kann man versuchen, die genaue und erhalten das Ergebnis.
Ich habe Beispiel-Bilder 128x128 (Breite x Höhe).
//Unten ist ein Beispiel Bild und die verschiedenen Ergebnisse durch die Anwendung unterschiedlicher Farbe
Code-änderungen werden in hohem Grade geschätzt.
InformationsquelleAutor der Antwort DareDevil
Bevor wir darüber reden, perfromance lassen Sie uns überprüfen Sie Ihren code:
Hier gibt es zwei Fehler:
Color.Black
aber Sie zuweisenColor.Black
zuoriginalColor
.Prüfen für Transparenz Sie sollten sich nicht vergleichen die
Color
- Objekt, aber der R -, G -, B-Werte, ändern wir zu:Nun wirst du sehen, dass es funktioniert, aber es dauert eine sehr lange Zeit zum verarbeiten jedes Bild:
GetPixel
undSetPixel
sind ziemlich langsam (primär, weil Sie prüfen und berechnen alles für jeden Anruf). Es ist viel besser zu handhaben bitmap-Daten direkt. Wenn Sie wissen, dass das Bild-format im Voraus (und es ist behoben, die für jedes Bild) dann kann man es viel viel schneller mit etwas mehr code:Natürlich kann man das weiter optimiert und Sie müssen, um die Handhabung der verschiedenen Formate ( siehe diese Liste von pixel-Formate und dieser Artikel über das layout), aber betrachten Sie es als Ausgangspunkt für die Arbeit mit bitmaps.
Vollständigkeit dies entspricht Farbe ohne direkten Zugriff auf die bitmap-Daten. Bitte beachten Sie, dass dies nur selten verwendet, da es furchtbar langsam.
Bitte beachten Sie auch, dass diese überlegen, alpha-Kanal im Vergleich (also 50% grün-transparent, zum Beispiel, ist nicht die gleiche Farbe wie 30% grün-transparent). Ignorieren alpha-Sie können Sie etwas wie dies:
Schließlich, wenn Sie wissen, dass die Pixel zu ersetzen, sind wenig Sie können eine raw-Kopie der original-Bild (mit
Graphics.FromImage
einen Kontext schaffen, und zeichnen es insource
bitmap), so werden Sie rufenSetPixel()
nur, wenn es ist ein Ersatz. IMO der Optimierung ist hier ziemlich nutzlos: wenn Sie Leistung verwenden erste Lösung...InformationsquelleAutor der Antwort Adriano Repetti
Einen Weg, um effizient eine Farbe zu ersetzen, ist die Verwendung einer Remapping-Tabelle. Im folgenden Beispiel wird ein Bild gezeichnet, innerhalb einer picture-box. In der Paint-Ereignis, die Farbe.Schwarz wird geändert, um die Farbe.Blau:
Mehr Informationen: http://msdn.microsoft.com/en-us/library/4b4dc1kz%28v=vs.110%29.aspx
InformationsquelleAutor der Antwort jcibar
Werde ich Ihnen eine andere Lösung, da diese nicht berechnen für jedes pixel.
Seine kurze und einfache. Konvertieren Zeit 62 ms:
InformationsquelleAutor der Antwort Nicholas