Frage

Ich weiß, wie sie zu implementieren, aber was ich nicht weiß, ob die Transformation Pixel für Pixel anzuwenden oder gibt es eine andere Art und Weise das ganze Bild zu beeinflussen, einen einzigen Anruf mit, etc?

AFAIK Get.Set Pixel ist sehr langsam. Ich bin nicht sicher, ob sie es auf diese Weise getan hat.

Also, wenn es die Graustufen ist / Filter als einfacher Fall entsättigt, wie würde man es schreiben?

War es hilfreich?

Lösung

Sie haben das Bild zu sperren und dann die Arbeit mit dem Speicher SetPixel Methode direkt unter Umgehung. hier oder noch besser hier

Für examle Sie die blaue Farbe auf 255 gesetzt, kann wie folgt

   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.

Andere Tipps

Um eine noch höhere Leistung zu erzielen, könnten Sie WPF prüfen wollen, Pixel Shader Effekte Implementierung, die mit allen .NET WPF visuellen Objekten arbeitet, nicht nur Bilder.

Schauen Sie sich auf einen Artikel erklärt einige grundlegende Umsetzungsschritte für eine solche Wirkung:

http: //bursjootech.blogspot. com / 2008/06 / Graustufen-Effekt-Pixel-Shader-Effekt-in.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top