2012-06-13 4 views
0

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의 문제점입니까? 어떻게하면 창에 표시되도록 할 수 있습니까?

On MacOn Windows

답변

0

Robin의 도움을 받아 해결책을 찾았습니다.

그것은 내가 wxPython에 버그 추적기에 추적 장치를 만들었습니다하지만 작품은 주위에 비트 깊이를 설정하는 것입니다, C++ 버그 24 text_bmp= wx.EmptyBitmap(w,h,24)

1

wxPython에 사용자 목록이 주제에 대한 여러 스레드가 있었다. 여기에 관련성이있는 one이 있습니다. 여기에 one이 더 있습니다.

+0

이봐 마이크 덕분에 답장을 아직 완전히 확실하지 않은 방법 Windows에서이 문제를 해결할 수 있습니다. 나는 이미지의 알파와 관련이 없지만 문자의 본문에 알파를 넣지 않는'ConvertColourToAlpha'와 관련된 문제라고 생각한다. 다른 모듈에서 다른 DC를 사용할 것을 권장합니까? 덧붙여서 – GP89

+0

+1 링크는 정말 도움이되었고 다른 문제를 해결하는 데 도움이되었습니다. – GP89

관련 문제