Ausgabe
Ich weiß, wie man sie implementiert, aber was ich nicht weiß, ist, ob die Transformation Pixel für Pixel angewendet werden soll oder ob es eine andere Möglichkeit gibt, das gesamte Bild mit einem einzigen Aufruf usw. zu beeinflussen?
AFAIK Get.Set Pixel ist sehr langsam. Ich bin mir nicht sicher, ob sie es so gemacht haben.
Wenn es sich also um den Graustufen-/Entsättigungsfilter als einfachen Fall handelt, wie würde man ihn schreiben?
Lösung
Sie müssen das Bild sperren und dann mit dem Speicher arbeiten, indem Sie die SetPixel-Methode direkt umgehen.
Siehe hier oder noch besser hier .
Zum Beispiel können Sie den blauen Kanal wie folgt auf 255 einstellen:
BitmapData bmd=bm.LockBits(new Rectangle(0, 0, 10, 10), System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
int PixelSize=4;
for(int y=0; y<bmd.Height; y++)
{
byte* row=(byte *)bmd.Scan0+(y*bmd.Stride);
for(int x=0; x<bmd.Width; x++)
{
row[x*PixelSize]=255;
}
} // it is copied from the last provided link.
Beantwortet von – Eugeniu Torica
Antwort geprüft von – David Marino (FixError Volunteer)