2016-09-17 22 views
0

このコードは私のUbuntuシステムではうまく動作しますが、Windows(7 x64ベース)で実行するとイメージは表示されません。Windowsのwx pythonでPILイメージを表示

このコードは、目的の形式

にスムーズに画像を合成するために枕を必要とする、より複雑なシステムの一部で誰でも助けてくださいことはできますか?私は依存関係や何かを欠いているかもしれませんか?

import wx 
from PIL import Image 


class Example(wx.Frame): 
    """ 
     class description 
    """ 
    def __init__(self): 
     """ 
      initialise form 
     """ 
     wx.Frame.__init__(self, None, -1, 'Title', size=(600, 600)) 
     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     bitmap = wx.Bitmap('circle.png', wx.BITMAP_TYPE_PNG) 
     image = bitmap.ConvertToImage() 
     image = self.image_to_pil(image) 
     static_bitmap = self.static_bitmap_from_pil_image(self, image) 
     sizer.Add(static_bitmap) 
     self.SetSizer(sizer) 
     self.Centre() 
     self.Layout() 

    @staticmethod 
    def static_bitmap_from_pil_image(caller, pil_image): 
     wx_image = wx.EmptyImage(pil_image.size[0], pil_image.size[1]) 
     wx_image.SetData(pil_image.convert("RGB").tobytes()) 
     wx_image.SetAlphaData(pil_image.convert("RGBA").tobytes()[3::4]) 
     bitmap = wx.BitmapFromImage(wx_image) 
     static_bitmap = wx.StaticBitmap(caller, wx.ID_ANY, wx.NullBitmap) 
     static_bitmap.SetBitmap(bitmap) 
     return static_bitmap 

    @staticmethod 
    def image_to_pil(image): 
     """Convert wx.Image to PIL Image.""" 
     width, height = image.GetSize() 
     data = image.GetData() 

     red_image = Image.new("L", (width, height)) 
     red_image.frombytes(data[0::3]) 
     green_image = Image.new("L", (width, height)) 
     green_image.frombytes(data[1::3]) 
     blue_image = Image.new("L", (width, height)) 
     blue_image.frombytes(data[2::3]) 

     if image.HasAlpha(): 
      alpha_image = Image.new("L", (width, height)) 
      alpha_image.frombytes(image.GetAlphaData()) 
      pil_image = Image.merge('RGBA', (red_image, green_image, blue_image, alpha_image)) 
     else: 
      pil_image = Image.merge('RGB', (red_image, green_image, blue_image)) 
     return pil_image 


if __name__ == '__main__': 
    """ 
     initialise application 
    """ 
    simple_screen_app = wx.App() 
    main_frame = Example() 
    main_frame.Show(True) 
    simple_screen_app.MainLoop() 

答えて

1

私は

wx_image.SetAlphaData(pil_image.convert("RGBA").tobytes()[3::4]) 

行をコメントアウトしていると、それはいくつかの状況では、いくつかの重要性を持っている必要がありますし、私の修正がユニバーサルを持っていないラインとして答えとして、私はこれをマークしません

+0

の作品適用性 – Psionman

+0

ソースイメージにアルファチャンネルがありますか? – RobinDunn

+0

こんにちは。私が行ったテストにはアルファチャンネルは含まれていませんが、明らかに他の画像にはアルファ層が含まれている可能性があります。これが何を意味するのだろうか? – Psionman

関連する問題