環境はwebkit版
なでしこ3のwebkit版が自分的に扱いやすいです。
実行するとウィンドウができてそこで動くし、手軽にファイルを開くこともできる。
なでしこ1でフォルダ列挙してJSONエンコードして保存
なでしこ3でファイルを開いてJSONデコード。
ただし、ファイル名が日本語だと読めないような?
//なでしこ3スクリプト
「json.txt」をファイル読んだ時には
フォルダ一覧=対象をJSONデコード
フォルダ一覧のセレクトボックス作成
本題:反復して画像読む
なでしこ3で「画像描画」すると画像をロードして完了したものから描画されます。
画像描画を2行連続で書くと、ロード完了が早いほうが先に描画されます。
たとえば
[0,0]へ「立ち絵.jpg」を画像描画
[0,0]へ「表情.jpg」を画像描画
とか書くとおそらくファイルサイズの小さい表情が先に描画されて、後から立ち絵で上書きされそう。
それを防ぐために「画像逐次読む」「画像読んだ時」があるのだけど
逐次実行は「反復」と相性が悪く複数画像のロードに向かない。
複数画像に対して「画像読んだ時」を使うと扱いにくいプログラムになる気がする。
そんなわけで「画像読む」でロードして、ロード完了まで「画面更新時実行」で待つことにする。
ファイルを「画像読む」すると それ にImageオブジェクトが入る。
Imageオブジェクトの「幅」を「DOM属性取得」することで、ロード完了したかどうかがわかるようだ。
//なでしこ3スクリプト
!インデント構文
画像キャッシュは空配列
//配列にあるファイル名を全部読んで 画像キャッシュ@ファイル名 に入れる
●画像ロード(list)
listを反復
file=対象
画像キャッシュのfileがハッシュキー存在//2回同じファイルをロードしない
もしそれが0ならば
fileを画像読む
画像キャッシュ@fileはそれ //imageオブジェクトが入る
//幅が0ならロードおわってない。 全部ロードが終わったら1を戻す
●ロード完了チェック
画像キャッシュを反復
w=対象の「幅」をDOM属性取得 //対象=imageオブジェクト
もしwが0ならば、0を戻す //ロードが終わっていない画像がある
1を戻す //全部ロードした
//ここから
list=["1.jpg","2.jpg","3.jpg"] //たくさんの画像
画像ロード(list)
「ロード完了時」を画面更新時実行
●ロード完了時
もしロード完了チェック()が0ならば
「ロード完了時」を画面更新時実行 //時間を空けてもう一度実行
戻る
違えば
listを反復 //たくさんの画像
file=対象
obj=画像キャッシュ@file //imageオブジェクト
objを[0,0]へ画像描画 //listの順番に表示される
#-----------------------------------------------------------------------
画像をメモリから消す
不要になったimageオブジェクトをメモリから消すには
「src」に空を設定して、NULLを入れると消える…らしい。
自信はない。
以下で動いている気がする。
#-----------------------------------------------------------------------
●イメージ解放(list)
listを反復
file=対象
画像キャッシュのfileがハッシュキー存在
もしそれが1ならば
obj=画像キャッシュ@対象
objの「src」に空をDOM属性設定
obj=NULL
画像キャッシュの対象をハッシュキー削除
#-----------------------------------------------------------------------
…もう一度言うけど自信はないです!