[solved] Transparenz im DC

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Rewrite... (danke an gerold)

Hallo mal wieder...

ich will in meinem DC einen Fading-Effekt einbauen. Dazu setze ich einfach in 4 oder 5 Zwischenschritten die Transparenzdaten des entstehenden Bitmaps und mache dann ein Refresh... zB so:

Code: Alles auswählen

def set_alpha_data(value):
    img = self.create_active_bitmap().ConvertToImage()
    buf = struct.pack('B', value)*img.GetWidth()*img.GetHeight()
    img.SetAlphaData(buf)
    self.bmp = img.ConvertToBitmap()
    self.add_bitmap_text(self.bmp)

set_alpha_data(32)
self.Refresh()
wx.CallLater(50, set_alpha_data, 64)
wx.CallLater(50, self.Refresh)
wx.CallLater(100, set_alpha_data, 128)
wx.CallLater(100, self.Refresh)
wx.CallLater(150, set_alpha_data, 192)
wx.CallLater(150, self.Refresh)
wx.CallLater(200, set_alpha_data, 255)
wx.CallLater(200, self.Refresh)
Nun will ich aber nicht, dass der Text auf den Bitmaps (soetwas wie Buttons) auch Transparent wird. Also dachte ich mir, zeichne ich den Text nachtraeglich auf das Bitmap:

Code: Alles auswählen

    def add_bitmap_text(self, bmp):
        dc = wx.MemoryDC(bmp)
        #dc.SetBrush(wx.Brush(self.GetBackgroundColour()))
        dc.SetPen(wx.BLACK_PEN)
        dc.SetFont(wx.FFont(8, wx.FIXED))
        #dc.Clear()
        gc = wx.GraphicsContext_Create(dc)
        gc.SetFont(dc.GetFont(), "black")
        gc.DrawText(self.label, 2, 3)
        dc.SetPen(wx.Pen("black"))
        dc.SetBrush(wx.Brush("black"))
        triangle_top = wx.Point(self.text_width+5, (bmp.GetHeight()-6)/2)
        dc.DrawPolygon([triangle_top, (triangle_top.x+3, triangle_top.y+3), (triangle_top.x, triangle_top.y+6)])
        dc.SelectObject(wx.NullBitmap)
Kann es sein, dass das DC (bzw GC) nur die Farbwerte, nicht aber die Transparenzwerte ueberschreibt? Also dass in einem 32bittigen Bitmap zwar der Farbwert eines Pixels auf (zB) #000000 aber eben nicht den Transparenzwert auf FF?

Kann man irgendwie dafuer sorgen, dass das GC bzw DC beim .DrawText die Transparenz beachtet (bzw entfernt/ auf 255 setzt)?


Gruß
NKoehring
Zuletzt geändert von nkoehring am Donnerstag 27. September 2007, 12:00, insgesamt 1-mal geändert.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

...hiermit Thema nach oben schiebe... ;-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo nkoehring!

Schau mal in die Demo. Suche dort nach "BitmapFromBuffer". Ist es das was du willst?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

oha... also dort funktioniert es scheinbar so wie ich es gedacht habe, naemlich das der Text keine Transparenz hat, aber eben das Bitmap "darunter"...

Danke schonmal, ich werd mir mal genau zu Gemuete fuehren, wie die das anstellen.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:der Text keine Transparenz hat, aber eben das Bitmap "darunter"...
Hallo nkoehring!

Der Text liegt unter dem Bitmap.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

ja das ist es nicht... Es funktioniert, weil sie eben das Bitmap und den Text extra zeichnen. Ich zeichne den Text auf das Bitmap und dann das gesamte Bitmap...

Problem ist quasi hiermit geloest:

Zuerst Bitmap zeichnen, dann den Text auf das DC zeichnen und schon klappts auch mit der Transparenz ;)
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten