Mac에서 잘 작동하지만 윈도우에서 제대로 작동하지 않는 그라데이션 텍스트를 그릴 수있는 기능이 있습니다.wxImage에는 win32에 알파 채널이 없습니다.
나는 실행 가능한 예를 함께 넣어 :
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하지만 일부 빨간색은 텍스트에 표시되어 있으므로 가장자리의 이미지에 일부 알파가 있어야한다고 생각합니다 (안티 앨리어싱 된 부분). 어쩌면 이것이 Windows에서 ConvertColourToAlpha
의 문제점입니까? 어떻게하면 창에 표시되도록 할 수 있습니까?
이봐 마이크 덕분에 답장을 아직 완전히 확실하지 않은 방법 Windows에서이 문제를 해결할 수 있습니다. 나는 이미지의 알파와 관련이 없지만 문자의 본문에 알파를 넣지 않는'ConvertColourToAlpha'와 관련된 문제라고 생각한다. 다른 모듈에서 다른 DC를 사용할 것을 권장합니까? 덧붙여서 – GP89
+1 링크는 정말 도움이되었고 다른 문제를 해결하는 데 도움이되었습니다. – GP89