[solved] Transparenz im DC
Verfasst: Dienstag 25. September 2007, 16:23
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:
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:
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
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)
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 man irgendwie dafuer sorgen, dass das GC bzw DC beim .DrawText die Transparenz beachtet (bzw entfernt/ auf 255 setzt)?
Gruß
NKoehring