「ケンタッキー」でググると・・・
関連検索がひどい。
今まで忘れてたのに、気分悪いわー。
LInux上で動くマンガビュアー その2
最初からコードを書き直した。
タブを除去しパネルの再描写に変更したら随分軽くなった。PILの処理速度は相変わらず。
サムネイル一覧の表示に時間がかかるので、再描写は極力控えるようにした。
マルチスレッドで
1 # thread test 2 # encoding: utf-8 3 import thread 4 import time 5 n = 0 6 7 def func(): 8 global n 9 while 1: 10 n += 1 11 if n > 100: 12 break 13 print "call func", n 14 # time.sleep(0.05) 15 16 def main(): 17 while 1: 18 if n > 100: 19 break 20 print "call main", n 21 # time.sleep(0.05) 22 23 thread.start_new_thread(func,()) 24 main()
実行するとターミナルではこのように表示される。
call main 0
call main 0
call main 0
call func 1
call func 2
call func 3
これだとmainの後にfuncを処理してるかのように見える。
実際はマルチスレッドとして動作しているが、なんか誤解しそう。
14と21行目でtime.sleepを行ったら思惑通りに表示された。
call main 0
call func 1
call main 1
call func 2
call main 2
原因はなんだろう。ターミナルの問題ならいいのだが。
そういえば
これって確か正常な動作のはず。wait()でレンダリング走らせるとか常識だったような。
wxPythonとPILを使って縮小した画像を綺麗に表示
最初にwxImage(wxPythonのwx.Image)を使って画像を縮小したんだが、どうも画質が悪い(ギザギザ)。
アンチエイリアス機能がなく、ぼかしを入れても所詮は気休め。
PILならアンチエイリアスを指定できるので、PILで画像を縮小させてからwx.image.ConvertToBitmap()に画像データを渡せばいいんじゃないの。
というわけで。
# PILで画像を読み込む image_pil = Image.open(image_path) image_pil.thumbnail((640,480), Image.ANTIALIAS) # wxPythonに縮小した画像を渡す image_wx = wx.EmptyImage(image_pil.size[0],image_pil.size[1]) image_wx.SetData(image_pil.convert('RGB').tostring()) wx.StaticBitmap(root, -1, image_wx.ConvertToBitmap(), (0,0), (640,480))
PILのthumbnailは比率を維持したまま変換できるので大変楽です。Image.ANTIALIASが肝心のアンチエイリアス指定。
wxPythonに縮小後の画像データを渡したら、あとはwx.StaticBitmapでrootフレームに表示します。
違いがはっきり分かるくらい、アンチエイリアスの有無で随分変わる。
ソース置き場
技術メモとか業界ネタとか