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
Paint# - eine Zeichenkomponente
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 3955

Themenstarter:

Paint# - eine Zeichenkomponente

beantworten | zitieren | melden

Paint# - eine Zeichenkomponente

Nachdem ich mich bei diesem Beitrag Komponente zur Bildbearbeitung an mein Grafikprogramm auf dem Amiga erinnert habe, und es anscheinend für C# (bzw. .NET) keine freie Zeichenkomponente gibt, habe ich mich mal an die Arbeit gemacht...

Herausgekommen ist "Paint#", welches aus folgenden Komponenten besteht:
- PaintControl: die eigentliche Zeichenfläche
- Palette: Anzeige und Auswahl von Vorder- und Hintergrundfarbe sowie eine konfigurierbare Farbtabelle
- PaintObjects: die eigentlichen Zeichenoperationen

Die PaintObjects basieren auf folgender Hierarchie:
PaintObject: Basisklasse
	BaseRect: Basisklasse für rechteckige Auswahl
		Selection: Auswahlrahmen
		Line: Linie
		Rect: Rechteck
		RoundRect: abgerundetes Rechteck
		Ellipse: Ellipse (bzw. Kreis)

	ColorSelection: Farbauswahl

	Draw: Zeichenstift

	Fill: Füllen eines (abgegrenzten) Bereichs

	Writing: Text

	Zoom: Vergrößerung (Lupe)

Eine Liste der vordefinierten PaintObjects erhält man über


using Paint;
using Paint.PaintObjects;

var PaintObjects = DefaultPaintObjects.PaintObjects;

Durch Zuweisung an die Eigenschaft "PaintObject" vom PaintControl wird die aktuelle Zeichenoperation festgelegt.
Außerdem implementiert PaintControl die Schnittstelle "IPaintControl", über welches die einzelnen PaintObjects Zugriff auf das PaintControl erhalten:


public interface IPaintControl
{
	Image Image { get; }
	Graphics Graphics { get; }

	ISelection Selection { get; }

	IUndoManager UndoManager { get; }

	Pen ForePen { get; set; }
	Pen BackPen { get; set; }

	int Zoom { get; set; }
}
Neben der Selektion (Cut, Copy, Paste, Crop) ist auch noch Undo/Redo für die Zeichenoperationen implementiert.

Standardmäßig erzeugt das PaintControl ein Bitmap der Größe 320x240 und setzt Schwarz als Vordergrundfarbe (ForePen) sowie Weiß als Hintergrundfarbe (BackPen). Es wurde extra Pen und nicht nur Color als Datentyp genommen, damit auch Stiftdicke (Width) oder Linienmodus (DashStyle) etc. gesetzt werden können.

Durch die Zuweisung an PaintControl.Image kann ein neues Bild angezeigt werden, z.B.


paintControl.Image = new Bitmap(640, 480);

Im Anhang befindet sich das Testprogramm 'WinPaint' (inkl. Sourcecode), welches alle Features von Paint# demonstriert.

Den Sourcecode der Paint#-Komponente veröffentliche ich ersteinmal noch nicht.
Sollte jemand aber Interesse an der Entwicklung von weiteren Zeichenoperationen (PaintObjects) haben, so werde ich dann entsprechend die Schnittstelle dafür detailiert beschreiben.

Das PaintControl kann aber beliebig in Programme integriert werden, um dem Anwender die Möglichkeit des Bearbeitens von Bildern zu geben (und wenn es nur die Selektion sowie Zoom ist).

Schlagwörter: Paint, Zeichenkomponente, Zeichenprogramm
Attachments
private Nachricht | Beiträge des Benutzers