Wie können Sie verlängern die Bitmap-Klasse
Ich versuche zu verlängern, mit der Bitmap-Klasse, so dass ich meine eigenen Effekte zu einem Bild. Wenn ich diesen code verwenden:
namespace ImageEditor
{
public class Effects : System.Drawing.Bitmap
{
public void toBlackAndWhite()
{
System.Drawing.Bitmap image = (Bitmap)this;
AForge.Imaging.Filters.Grayscale filter = new AForge.Imaging.Filters.Grayscale();
this = filter.Apply(this);
}
}
}
Bekomme ich die folgende Fehlermeldung:
'ImageEditor.Effects': cannot derive from sealed type 'System.Drawing.Bitmap'
Also gibt es eine Möglichkeit, dies zu umgehen, oder ist es einfach nicht möglich, die Klasse zu erweitern?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht ableiten, aus Bitmap -, denn es ist versiegelt.
Wenn Sie möchten, fügen Sie eine Methode hinzu, um die Bitmap-Klasse, schreiben einen extension-Methode:
Dann verwenden Sie es wie diese:
+1 für Juda ' s Antwort.
Denken Sie auch darüber nach Rücksendung eine neue bitmap mit den filtern angewendet, eher als änderung des ursprünglichen Inhalts. Dies wird geben Sie Ihrer app weitere Optionen in den langen Lauf (undo etc)
Verlängern Sie die BitmapSource Klasse, wenn Sie sich bewegen in die WPF und das hinzufügen einer toblackandwhite Methode wäre einfach - aber die Strafe ist, dass man mit WPF Lesen Sie die bitmap in. Sehen Benutzerdefinierte BitmapSource
Einer versiegelten Klasse bedeutet, der Autor hat ausdrücklich vorschreibt, dass keine Klassen von Ihr Erben. Gibt es wirklich keine Möglichkeit um ihn herum. Wenn Sie schauen, um fügen Sie Funktionen, um die Bitmap-Klasse, die Sie betrachten könnte extension-Methoden.
Natürlich könnten Sie schreiben eine wrapper-Klasse oder eine utility-Klasse, sondern eine Erweiterung Methoden wird Ihnen das Verhalten wie die meisten Erben von
Bitmap
.Den vorherigen Antworten sind gut - Erweiterung Methoden anwenden schön hier. Auch mein Erster Gedanke war, dass die Vererbung nicht eine gute Wahl, um mit zu beginnen, da man nicht wirklich erstellen eine andere Art von bitmap - (is-a-Beziehung), Sie wollen einfach nur zu Verpacken, code zu manipulieren eine. In anderen Worten gibt es keine Notwendigkeit zum bestehen einer bitmap abgeleiteten Klasse zu sowas kann man einfach die modifizierte bitmap an die Stelle der ursprünglichen.
Wenn Sie wirklich beabsichtigten, zu überschreiben Bitmap-Methoden mit Ihren eigenen, ich würde Aussehen, sorgfältig wieder auf, was Sie versuchen zu erreichen, für etwas so Komplexes wie Bildbearbeitung könnten Sie besser gedient werden, durch die Bereitstellung der Funktionalität neben der ursprünglichen Methoden, im Gegensatz zum verdrängt Sie.