フィルター処理と組み合わせる
最後に、前回作成した画像フィルターのスクリプトを追加して完成させましょう。前回のスクリプトはmyFilter()という名前の関数にし、描画するドットの数を引数として受け取るようにします。GUIのボタンがクリックされたら以関数myFilterを呼び出し、parseInt()で値を整数化します。3.14なら3になりますし、215pxと入力されていた場合は215の数値部分だけを返します。実際には数値かどうか、あまりに大きい数値や負数が入力されていないかなどをチェックする処理を入れた方がよいでしょう。
myFilter(parseInt(dlg.edttext.text));
フィルター処理が完了したらclose()メソッドを使ってダイアログウィンドウを閉じます。継続してダイアログウィンドウを表示させておきたい場合にはdlg.close();は不要です。
これですべての処理が完成しました(サンプル05)。
●サンプル05
#target "Bridge"
var dlg = new Window("dialog", "ランダムピクセル描画フィルタ設定ダイアログ", [100, 100, 400, 300]);
dlg.btn = dlg.add("button", [20, 160, 280, 180], "実行"); // (20, 160)-(280, 180)にボタンを表示
dlg.add("statictext", [20, 30, 280, 50], "■ランダムピクセル描画");
dlg.add("statictext", [20, 70, 280, 90], "ランダムに表示する点の数:");
dlg.edttext = dlg.add("edittext", [20, 100, 280, 120], "100");
dlg.btn.onClick = function(){
myFilter(parseInt(dlg.edttext.text)); // 指定された値を関数に渡す
dlg.close();
}
dlg.show();
// ランダムドット描画フィルター
function myFilter(count){
var myCanvas = new BitmapData(320, 240);
for(var i=0; i<count; i++){
var x = Math.floor(Math.random() * 320);
var y = Math.floor(Math.random() * 240);
var R = Math.floor(Math.random() * 256);
var G = Math.floor(Math.random() * 256);
var B = Math.floor(Math.random() * 256);
var myColor = new Color(R, G, B);
myCanvas.setPixel(x,y, myColor);
}
var savePath = File.saveDialog ("保存先とJPEG保存ファイル名を指定してください", "")
if (savePath) { myCanvas.exportTo(savePath, 100); }
}
◆
ここまで全6回にわたってAdobe BridgeのJavaScript機能について解説してきましたが、いかがだったでしょうか。単なる画像ビューアやファイル管理ソフトではなく、まったく別の可能性もあると感じてもらえたでしょうか。今回紹介した以外にも、Bridgeにはメニューの追加などたくさんの機能が用意されています。この機会にBridgeのJavaScriptを使ってみてはどうでしょうか。
オマケ:
Bridgeで定期的にサーバーからデータを取得する方法
最後にもう1つだけ、Bridgeの便利な機能を紹介します。Bridgeには定期的に処理を実行するタスク機能が用意されています。一定間隔ごとに指定されたスクリプトを実行するapp.scheduleTask()という機能です。最初の引数には定期的に実行させたいスクリプト、2番目の引数には実行間隔をミリ秒で指定します。3番目は定期的に実行するかどうかのフラグで、trueなら定期的に実行し、falseなら1回だけ実行します。
app.scheduleTask()を利用するとサンプル06のように定期的にWebサーバーからデータを取得できます。実行中のタスクを中止させる場合はapp.cancelTask()を使い、引数にタスクIDを指定します。タスクIDはapp.scheduleTask()の戻り値です。
●サンプル06
#target "Bridge"
var taskID = app.scheduleTask('app.openUrl("http://ascii.jp/web/");', 10*1000, true);
app.scheduleTask("app.cancelTask("+taskID+")", 30*1000, false)