Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Snippet] Bild beim Zeichnen invertieren
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

[Snippet] Bild beim Zeichnen invertieren

beantworten | zitieren | melden

Beschreibung:

Weil ich das Problem auch gerade hatte und eine Weile nach der Lösung suchen musste und nicht alle Lösungen, die im Netz angeboten werden, in allen Fällen funktionieren, hier mal eine ColorMatrix, die mit allen Farben korrekt funktioniert.

ImageAttributes ia = new ImageAttributes ();
ColorMatrix cm = new ColorMatrix ();

cm.Matrix00 = cm.Matrix11 = cm.Matrix22 = -1;
cm.Matrix40 = cm.Matrix41 = cm.Matrix42 = 1;

ia.SetColorMatrix(cm);

// Jetzt können die ImageAttributes als Parameter für Graphics.DrawImage
// verwendet werden, um das Bild beim Zeichnen zu invertieren, z.B.
e.Graphics.DrawImage (bmp,
                      new Rectangle (0, 0, bmp.Width, bmp.Height),
                                     0, 0, bmp.Width, bmp.Height,
                      GraphicsUnit.Pixel,
                      ia);

Siehe auch das Kapitel Neueinfärben von Bildern und dessen Unterabschnitte:

Gewusst wie: Verwenden einer Farbmatrix zum Transformieren einer Farbe
Gewusst wie: Verschieben von Bildfarben
Skalieren von Farben mithilfe von Transformationen
Gewusst wie: Drehen von Farben
Gewusst wie: Scheren von Farben
Gewusst wie: Verwenden einer Farbumwandlungstabelle

Schlagwörter: color, colors, Farbe, Farben, ColorMatrix, Bitmap, Image, Graphics, ImageAttributes, invertieren, negieren, umkehren, 1000 Worte

Quelle: myCSharp.de
private Nachricht | Beiträge des Benutzers
sl1ce
myCSharp.de - Member



Dabei seit:
Beiträge: 5

beantworten | zitieren | melden

sorry fürs ausgraben.

wie könnte man das bild verändern ohne es zeichnen zu müssen? ich finde irgendwie keine möglichkeit die matrix an das bild zu übergeben
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Hallo sl1ce,

meines Wissens hat ein Bitmap-Objekt selbst - bis auf das (sehr langsame) SetPixel - keine verändernden Methoden. Alle Veränderungen laufen über ein Graphics-Objekt. Und bei dem ist wiederum DrawImage die einzige Methode, die dafür passt. Ich sehe also keine Alternative zu dem Code und auch keinen Grund, warum man es nicht wie beschrieben machen sollte.

Natürlich ist man bei der Wahl des Zeichenziels frei. Man muss also nicht - wie im Beispiel - den e.Graphics-Parameter der OnPaint-Methode bzw. des Paint-Events verwenden, sondern kann per Graphics.FromImage ein Graphics-Objekt erzeugen, das ein Bitmap-Objekt als Ziel der Zeichenoperationen verwendet.

Ein Beispiel für dieses Vorgehen findet sich z.B. in [gelöst] Bitmap-Randproblem beim Verkleinern mit InterpolationMode.HighQualityBilinear. Und allgemeiner ist es in [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) beschrieben.

herbivore
private Nachricht | Beiträge des Benutzers