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
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Paint# - eine Zeichenkomponente
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Paint# - eine Zeichenkomponente

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

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.271
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Paint# - eine Zeichenkomponente

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

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

C#-Code:
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:

C#-Code:
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.

C#-Code:
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


Dateianhang:
unknown WinPaint.zip (90,22 KB, 441 mal heruntergeladen)
02.12.2010 15:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Jahre.
Der letzte Beitrag ist älter als 8 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.07.2019 04:43