.NET Bitmap: Erase

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

.NET Bitmap: Erase

Beitrag von Xin » Di Jan 19, 2010 6:08 pm

Ich stelle auch mal eine blöde Frage... ich beschreibe eine transparente Bitmap. Den Text möchte ich später aber wieder ändern.
Wenn ich jetzt neuen Text dadrüber schreibe, überlappen sich die Texte - man kann nix mehr lesen.
Also möchte ich den alten Text erst löschen, also wieder Transparent machen.

Wenn ich nun ein Rectangle drüber male in der Farbe "Transparent" passiert, was eben passiert, wenn man mit Klarlack über eine Oberfläche geht: Nix. Der alte Text scheint durch meine transparente Farbe. Ich will den Bereich aber wieder transparent bekommen...

Kann mir jemand spontan sagen, wie das geht, weil Graphics.Erase gibt's nicht. :-/
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: .NET Bitmap: Erase

Beitrag von Xin » Di Jan 19, 2010 6:14 pm

Ich habe mich ja letztens mal darüber ausgelassen, dass die Jungs von Microsoft irgendwie es nie schaffen, die Dinge zum Schluss zu denken.
Statt einen Erase-Brush einzuführen, den man mit allen Zeichenfunktionen nutzen könnte, gibt's das:

Code: Alles auswählen

            _graphics.SetClip( new Rectangle( 0, 0, _minTextWidth, Height ) );
            try
            {
                _graphics.Clear(Color.Transparent);
            }
            finally
            {
                _graphics.ResetClip();
            }
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: .NET Bitmap: Erase

Beitrag von cloidnerux » Di Jan 19, 2010 6:33 pm

Gibt es überhaupt eine Graphicbibilothek, die ien Funktion "Erase" besitzt, weil es ja mehr ausrückt ein Objekt endgültig zu löschen, anstatt nur den Bildschriminhalt zu löschen, also zu "clearen".
Außerdem willst du ja entweder den Bildschirminhalt bereinigen, oder das objekt löschen, was mit "dispose" gleichkommt.
Außerdem, köntest du nicht einfach die Fläche Invalidieren, was ein Neuzeichenen nach sich zieht, und dann den neuen Text mit zeichnen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: .NET Bitmap: Erase

Beitrag von Xin » Di Jan 19, 2010 7:21 pm

cloidnerux hat geschrieben:Gibt es überhaupt eine Graphicbibilothek, die ien Funktion "Erase" besitzt, weil es ja mehr ausrückt ein Objekt endgültig zu löschen, anstatt nur den Bildschriminhalt zu löschen, also zu "clearen".
Auf die Bezeichnung Erase kam ich, weil die Frage in einem englischsprachigen Forum mit 'Erase' formuliert wurde und mir dabei einfiel, dass ich daaaamals (1990) bereits ein 2D-Zeichenprogramm geschrieben habe, für das ich den Punkt auch schon nachgeschlagen habe und so erfahren habe, dass die Funktion 'Erase' heißt.
cloidnerux hat geschrieben:Außerdem willst du ja entweder den Bildschirminhalt bereinigen, oder das objekt löschen, was mit "dispose" gleichkommt.
Nein, ich will die Grafik, die ich schon anzeige, verändern.
cloidnerux hat geschrieben:Außerdem, köntest du nicht einfach die Fläche Invalidieren, was ein Neuzeichenen nach sich zieht, und dann den neuen Text mit zeichnen?
Ich will die Fläche neu zeichnen. Die Betonung liegt auf ich 'ich' - nicht Windows. Ich versuche Windows beizubringen, wie es die Fläche neuzeichnen muss, wenn wer auch immer die Fläche invalidiert. ^^

Wie schon gesagt - ich löse hier Probleme, an die Microsoft nicht gedacht hat, ansonsten könnte ich nämlich Microsoft Lösungen verwenden. Da MS die Lösung nicht hat, nehme ich eine vorhandene Grafik, radiere das weg, was ich nicht mehr brauche und modifiziere sie so, wie ich sie brauche.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: .NET Bitmap: Erase

Beitrag von cloidnerux » Di Jan 19, 2010 9:42 pm

Wie schon gesagt - ich löse hier Probleme, an die Microsoft nicht gedacht hat, ansonsten könnte ich nämlich Microsoft Lösungen verwenden. Da MS die Lösung nicht hat, nehme ich eine vorhandene Grafik, radiere das weg, was ich nicht mehr brauche und modifiziere sie so, wie ich sie brauche.
Leite eine neue Klasse ab und Überlade den OnPaint Handler der Komponente oder Weise einen eigenen OnPaint Eventhandler zu deiner Komponente hinzu und lässt den String dadrin ausgeben?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: .NET Bitmap: Erase

Beitrag von Xin » Di Jan 19, 2010 10:37 pm

cloidnerux hat geschrieben:
Wie schon gesagt - ich löse hier Probleme, an die Microsoft nicht gedacht hat, ansonsten könnte ich nämlich Microsoft Lösungen verwenden. Da MS die Lösung nicht hat, nehme ich eine vorhandene Grafik, radiere das weg, was ich nicht mehr brauche und modifiziere sie so, wie ich sie brauche.
Leite eine neue Klasse ab und Überlade den OnPaint Handler der Komponente oder Weise einen eigenen OnPaint Eventhandler zu deiner Komponente hinzu und lässt den String dadrin ausgeben?
Hehehe, ich kann die Grafik zeichnen... ich konnte die vorhandene Grafik aber nicht auf Transparent zurücksetzen, also bereits gezeichnetes wegradieren.

Das Problem ist erledigt - ich habe die Lösung ein paar Minuten später selbst gefunden und gepostet.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten