使用wx.Bitmap在jpeg文件上绘制半透明矩形

时间:2013-08-20 01:21:24

标签: python wxpython

我需要加载一个jpeg->绘制一个半透明的矩形 - >保存jpeg文件 使用python wx包的wx.Bitmap。 但矩形看起来完全不透明。

我正在使用Windows 7和32bpp。 我检查并尝试了“Docs and Demos \ demo \ AlphaDrawing.py”wx演示,它运行良好。 它在wx.Panel上正确绘制了一个半透明的矩形。

我在网上查了解这个问题的解决方案,但没有一个解决方案有效。

我创建了一个更简单的示例,以尽量减少错误的可能性,但仍然无效。 加载jpg->绘制半透明矩形 - >保存为jpg文件

wimg = wx.Image(r"N:\Images\Wallpapers\Processed\a.jpg", wx.BITMAP_TYPE_JPEG)
print wimg.HasAlpha()
wimg.InitAlpha()
print wimg.HasAlpha()
bmp = wimg.ConvertToBitmap()
print bmp.HasAlpha()
dc = wx.MemoryDC(bmp)
r, g, b = (34,  34,  34)
dc.SetPen(wx.Pen(wx.Colour(r, g, b, wx.ALPHA_OPAQUE)))
dc.SetBrush(wx.Brush(wx.Colour(r, g, b, 128)))
dc.DrawRectangle(100, 300, 200, 200)
bmp.SaveFile(r"N:\Images\Wallpapers\Processed\b.jpg", wx.BITMAP_TYPE_JPEG)

打印结果为:False / True / True 而且输出仍然是一个完全不透明的矩形

我知道jpeg没有alpha通道,但我不想要32bpp的jpeg。 只是显示矩形与背景混合的输出。

1 个答案:

答案 0 :(得分:0)

位图文件没有Alpha通道。您必须加载PNG文件才能使用透明度。

“与RGB数据不同,并非所有图像都有alpha通道,在使用GetAlpha之前,您应检查此图像是否包含HasAlpha的Alpha通道。请注意,目前只有从具有透明度信息的PNG文件加载的图像才会有Alpha通道。 “

http://www.wxpython.org/docs/api/wx.Image-class.html