Macではうまく機能するグラデーションテキストを描画する機能がありますが、Windowsでは正しく機能しません。
実行可能な例にまとめました:
import wx
def get_gradient_text_solid_bg(text,point_size,top_colour,bottom_colour,bg_colour_tuple):
dc=wx.MemoryDC()
f= dc.GetFont()
f.SetPointSize(point_size)
dc.SetFont(f)
dc.SelectObject(wx.EmptyBitmap(0,0))
w,h= dc.GetTextExtent(text)
template_bmp= wx.EmptyBitmap(w,h)
dc.SelectObject(template_bmp)
dc.SetBackground(wx.Brush(wx.WHITE))
dc.Clear()
dc.DrawText(text,0,0)
dc.SelectObject(wx.NullBitmap)
template_image= template_bmp.ConvertToImage()
template_image.ConvertColourToAlpha(*bg_colour_tuple)
template_bmp= template_image.ConvertToBitmap()
text_bmp= wx.EmptyBitmap(w,h)
dc.SelectObject(text_bmp)
dc.GradientFillLinear((0,0,w,h),top_colour,bottom_colour,wx.SOUTH)
dc.DrawBitmap(template_bmp,0,0)
dc.SelectObject(wx.NullBitmap)
return text_bmp
class Frame(wx.Frame):
def __init__(self,*args,**kwargs):
wx.Frame.__init__(self,*args,**kwargs)
panel= wx.Panel(self)
bg_colour= (237,237,237)
panel.SetBackgroundColour(wx.Colour(*bg_colour))
wx.StaticBitmap(panel,bitmap=get_gradient_text_solid_bg("Testing",30,(255,80,80),(255,215,215),bg_colour))
self.Show()
if __name__ == "__main__":
app= wx.App(False)
Frame(None)
app.MainLoop()
なぜ機能しないのか正確にはわかりません.wxImageにはWindowsのアルファチャンネルがないように見えるためだと思いましたが、テキストに赤が表示されているのを見ることができるので、あるに違いないと思います.イメージのエッジ (アンチエイリアス部分) にいくつかのアルファがあるので、これはConvertColourToAlpha
Windows の問題でしょうか? これをWindowsで同じように表示するにはどうすればよいですか?