经过一周的持续失败后,我仍然无法完成一项简单的任务:加载带有alpha通道或白色背景的png(例如下面的示例)并让它在wx.StaticBitmap中保持透明度。
我稍后需要在wx.panel中。它应该保持这样或类似。
这是我的方法之一(白色背景):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.loc = wx.Image("intro/image.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
z = wx.Mask(self.loc, wx.WHITE)
self.loc.SetMask(z)
self.locopic = wx.StaticBitmap(self, -1, self.loc, (0, 0))
我读了很多关于这个话题的内容。我是垃圾。抱歉。我想我错过了一些明显的东西。 wx.Mask,Transparent images
更新
我设法找到了at WorkinWithImages:
的示例import ImageConversions
...
puFilename = "intro/imagealpha.png"
pilImage = Image.open( puFilename )
pilImageWithAlpha = ImageConversions.WxImageFromPilImage( pilImage, createAlpha=True )
self.puWxBitmap = pilImageWithAlpha.ConvertToBitmap()
self.locopic = wx.StaticBitmap(self, -1, self.puWxBitmap)
这是在PNX中创建透明的wx.image,在wx中使用alpha通道BUT.StaticBitmap会有透明度应该是丑陋的黑色。这让我感到震惊!!!请帮忙!
如果只是我设法在wx.panel中显示该图像的透明度在正确的位置 谢谢社区!
答案 0 :(得分:4)
正如python SO聊天中所讨论的那样:
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.loc = wx.Bitmap("intro/image.png")
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.SetBackground(wx.Brush("WHITE"))
# ... drawing here all other images in order of overlapping
dc.DrawBitmap(self.loc, 0, 0, True)
诀窍是使用wx.PaintDC
绘制所有重叠图像。
此外,使用wx.Bitmap
代替wx.Image(..., wx.BITMAP_TYPE_PNG).ConvertToBitmap()
从文件系统加载PNG更方便。