myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » [Snippet] Bild beim Zeichnen invertieren
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Snippet] Bild beim Zeichnen invertieren

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.483
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

[Snippet] Bild beim Zeichnen invertieren

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

C#-Code:
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
29.04.2007 17:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 6 Jahre.
sl1ce
myCSharp.de-Mitglied

Dabei seit: 24.09.2013
Beiträge: 4


sl1ce ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
24.09.2013 06:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.483
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin

Themenstarter Thema begonnen von herbivore

herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
24.09.2013 07:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.01.2021 08:53