0

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のアルファチャンネルがないように見えるためだと思いましたが、テキストに赤が表示されているのを見ることができるので、あるに違いないと思います.イメージのエッジ (アンチエイリアス部分) にいくつかのアルファがあるので、これはConvertColourToAlphaWindows の問題でしょうか? これをWindowsで同じように表示するにはどうすればよいですか?

Mac の場合Windows の場合

4

2 に答える 2

1

wxPython-users リストには、このトピックに関するスレッドがいくつかあります。ここにあなたに関連するかもしれないものがありますそして、ここにもう 1 つあります。

于 2012-06-13T14:25:14.197 に答える
0

ロビンの助けを借りて、これに対する解決策を見つけました。

これは C++ のバグです。wxpython バグ トラッカーでトラッカーを作成しましたが、回避策としてビット深度を 24 に設定します。text_bmp= wx.EmptyBitmap(w,h,24)

于 2012-06-15T10:10:59.517 に答える