Seite 1 von 1

[solved] Transparenz im DC

Verfasst: Dienstag 25. September 2007, 16:23
von nkoehring
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

Verfasst: Mittwoch 26. September 2007, 19:57
von gerold
...hiermit Thema nach oben schiebe... ;-)

Verfasst: Donnerstag 27. September 2007, 10:09
von gerold
Hallo nkoehring!

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

lg
Gerold
:-)

Verfasst: Donnerstag 27. September 2007, 10:46
von nkoehring
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.

Verfasst: Donnerstag 27. September 2007, 11:03
von gerold
nkoehring hat geschrieben:der Text keine Transparenz hat, aber eben das Bitmap "darunter"...
Hallo nkoehring!

Der Text liegt unter dem Bitmap.

lg
Gerold
:-)

Verfasst: Donnerstag 27. September 2007, 11:59
von nkoehring
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 ;)