SGEで画像ビューワー
早速迷走を。
タイトルとおり、SGEで画像ビューワーを作ろうと思いました。将来的にはタグとかつけられたり、画像を比較して大きさが違っても「これとこれ同じでないんかい?」と提案したりするような奴。
今の時点での実装は以下の通り。
- 起動すると、コンソールが立ち上がる。
- このコンソールにディレクトリをドラッグ&ドロップすると、そのディレクトリとサブディレクトリに含まれる全ての *.jpg と *.png をリストアップし、それを順番に表示する。
- クリックで次の画像。
- 全ての画像を表示したら終了。
root.lua
dofile("string.lua") gui.create(800,600) font.define({name="MS ゴシック", width=22, height=22}) -- フォントの設定 local dirs while type(dirs) == "nil" do dirs = gui.getdropfilelist() gui.doevents() end local dir = dirs[1] gui.caption(encoding.ansi_to_utf8(dir)) local file_list = {} for k, v in ipairs(gui.getfilelist(dir)) do local exts = v:split(".") -- .で分割する。 local ext = exts[#exts]:lower() -- 末尾を取得する。 if ext == "jpg" or ext == "png" then local full = dir.."\\"..v file_list[1 + #file_list] = full end end function click() repeat gui.doevents() l,r,w,ld,rd=gui.getclick() until l end for k, v in ipairs(file_list) do texture.load(1, v) draw.beginscene() -- 描画開始 draw.all(1, 0, 0, 255) -- 描画 draw.endscene() -- 画面反映 click() end
string.lua(追加のモジュール)
--[[* split string *]]-- -- return iterator string.split_it = function(str, sep) if str == nil then return nil end assert(type(str) == "string", "str must be a string") assert(type(sep) == "string", "sep must be a string") return string.gmatch(str, "[^\\" .. sep .. "]+") end -- return table string.split = function(str, sep) local ret = {} for seg in string.split_it(str, sep) do ret[#ret+1] = seg end return ret end --[[* join *]]-- table.join = function (tbl, sep) local ret for n, v in pairs(tbl) do local seg = tostring(v) if ret == nil then ret = seg else ret = ret .. sep .. seg end end return ret end -- 日本語
上記の追加モジュールは、http://d.aoikujira.com/blog/index.php?2009%252F04%252F16%252FLua%E3%81%AEstring%E3%81%ABsplit%E3%81%A8join%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8Bより使わせていただきました。
追記
トラックバック送れられなくね? ブログとか言ってる割に。