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:
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