wxPython(Phoenix) bytes型の画像をwx.Imageに読み込む

Phoenixでは画像はwx.Imageクラスで扱う。

wx.Imageインスタンスを作成するときは、

import wx
img = wx.Image(filename)

のようにファイル名を指定するドキュメントやチュートリアルばかり。 しかし、docをよく読むと、streamもパラメータとして渡せることになっている。

このstreamを使えばbyteになっている画像も表示できるだろう。 どうやって使うのか。試行錯誤をしてみると、どうやら以下の感じでいいみたい。

import io
import wx
with open('someimage.png', 'rb') as f:
    # ここのbyte_dataを好きなものに置き換えればいける
    byte_data = f.read()
    bytesio = io.BytesIO(byte_data)
    img = wx.Image(bytesio)

で出来上がり。作成したwx.Imageは用済みになったら、

img.Destroy()

をすべきかも。(まだ確かめてない) ちなみに画面に映すには、wx.StaticBitmapが紹介されている。 本当に表示するだけなので、不満なら自分でdc.DrawBitmap()した方が良さそう。

タイトルとURLをコピーしました