カメラ撮影画像を表示する
ファイル名一覧を取得する関数を用いて、カメラ撮影画像ファイルを読み込むサンプルプログラムを作ってみました。
canvas.putg()の座標やサイズを変更すると、サムネイルとして並べることや、大きな画像をスクロールして表示させることも可能です。
------------------------------------------ --ファイル名を取得するサンプル --スクロール表示サンプルも付いてます ------------------------------------------ --関数宣言-------------------------------- main={} --mainメソッド split={} --文字の分解 getFilename={} --ファイル名読み込みます printscrl={} --スクロールするテキスト表示 --グローバル変数宣言---------------------- Filename={} --ファイル名取得用配列 LuaPath="/sdcard/luarida/getfilenamesample/" --luaファイルを保存しているPath CameraFolder="/sdcard/DCIM/Camera" --写真データのフォルダ ------------------------------------------ mt={} mt.__newindex=function(mtt,mtn,mtv) dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end mt.__index=function(mtt,mtn) dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 ) toast("画面タッチで実行を続けます", 1) touch(3) end setmetatable(_G,mt) --------以下が実プログラム---------------- ------------------------------------------ --スクロールするテキスト表示 ------------------------------------------ function printscrl( str, fontsize, fcolor, bcolor ) local w,h = canvas.getviewSize() local sc --一度、見えないところにテキストを書いて、改行数を求める sc = canvas.drawTextBox( str, 0, h+1, fontsize, fcolor, w ) --画面の絵をワークエリアに取り込みます canvas.getg( 0, fontsize*sc, w-1, h-1, 0, fontsize*sc, w-1, h-1 ) --取り込んだ画面をスクロールさせて描きます canvas.putg( 0, 0, w-1, h-fontsize*sc-1, 0, fontsize*sc, w-1, h-1 ) --書き出す部分をバックカラーで塗り潰します canvas.drawRect( 0, h-fontsize*sc-1, w, h, bcolor, 1 ) --フラッシュします canvas.putflush() --スクロールしたところにテキストを書きます canvas.drawTextBox( str, 0, h-fontsize*sc, fontsize, fcolor, w ) end ------------------------------------------ --文字の分解 ------------------------------------------ function split(str, d) local s = str local t = {} local p = "%s*(.-)%s*"..d.."%s*" local f = function(v) table.insert(t, v) end if s ~= nil then string.gsub(s, p, f) f(string.gsub(s, p, "")) end return t end ------------------------------------------ --ファイル名を読み込みます --ファイル名を取得したテーブルが返ります ------------------------------------------ function getFilename( folder ) local fp local msg local str local t={} local i = 1 local tmpFile = LuaPath.."files.tmp" --ファイル名を書き出すテンポラリファイル local fname={} --os.execute()を用いて、ls -l を行い、フォルダ内容をファイルに書き出す。 os.execute( "ls -l '"..folder.."' > "..tmpFile ) --ファイルを開きます fp,msg = io.open( tmpFile, "r") if( not(fp) )then dialog( tmpFile.."がオープンできません","プログラムを終了します", 0 ) return end --データを読み込みます while(true)do str = fp:read("*l") --1行読み込み if( str==nil )then break end --読込むデータが無ければ終了 str = string.gsub( str,"\r","" ) --改行コードを外す --dで始まっているものはフォルダなので無視する if( string.sub( str, 1, 1 )~="d" )then t = split( str, ":" ) --コロンで分ける。 --ファイルのみを抽出します fname[i] = string.sub( t[2], 4 ) --t[2]の4文字目以降がファイル名 i = i + 1 end end io.close(fp) return fname --ファイル名テーブルを返す end ------------------------------------------ --メインプログラム ------------------------------------------ function main() local i local n --画面を白色にする canvas.drawCls( color(255,255,255) ) --/sdcard/DCIM/Cameraにあるファイル名を取得する Filename = getFilename( CameraFolder ) n = #Filename printscrl( CameraFolder.." にあるファイル一覧", 18, color(0,0,0), color(255,255,255) ) for i=1,n do printscrl( Filename[i], 18, color(0,0,0), color(255,255,255) ) end --画像を読み込んで画面に表示します for i=1,n do --ワークエリア画面をクリアします canvas.workCls() if( string.upper(string.sub(Filename[i],-3))=="JPG" )then --jpgファイルのみを抽出する if( canvas.loadBmp( CameraFolder.."/"..Filename[i], 0, 0, 1023, 795 )==-1 )then dialog( CameraFolder.."/"..Filename[i], "ロードに失敗しました",1 ) do return end end --ワークエリアから画面に持ってくる canvas.putg( 0, 0, 480, 300, 0, 0, 1023, 795 ) canvas.putflush() --画面更新 --影付きでファイル名を表示する canvas.drawText( Filename[i], 1, 1, 20, color(0,0,0) ) canvas.drawText( Filename[i], 0, 0, 20, color(255,255,255) ) toast( "画面タッチで次の画像表示", 0 ) touch(3) end end end main()