0

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

我正在使用 32bpp 的 Windows 7。我检查并尝试了“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)

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

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

4

1 回答 1

0

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

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

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

于 2013-08-20T16:35:19.960 回答