Seite 1 von 1

.NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 6:08 pm
von Xin
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. :-/

Re: .NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 6:14 pm
von Xin
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();
            }

Re: .NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 6:33 pm
von cloidnerux
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?

Re: .NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 7:21 pm
von Xin
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.

Re: .NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 9:42 pm
von cloidnerux
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?

Re: .NET Bitmap: Erase

Verfasst: Di Jan 19, 2010 10:37 pm
von Xin
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.