ファイルオープンダイアログと保存ダイアログ
サンプル02は特定の場所にある特定の画像ファイルに対して、フィルター処理を適用するスクリプトでした。保存先や保存ファイル名も固定されているので、このままだと使いにくく不便です。そこで、処理を適用する元の画像と保存先のパス/ファイル名を自由に選択できるように改良しましょう。
改良版では、ファイルオープンダイアログを表示してユーザーに任意のパス/ファイル名を選択してもらうことにします。ファイルオープンダイアログはFile.openDialog()とするだけで表示されます。最初の引数にダイアログ上に表示するメッセージを、2番目の引数に表示する画像の種類(WindowsとMacで方法が異なる)を、3番目の引数にファイルの複数選択の可否(trueで複数選択、falseで1つだけ選択)を指定します。2番目の引数はWindowsとMacでは異なるため詳しい説明は省略しますが、Windowsでは"*.jpg"とするとJPEGファイルだけが選択できるようになります。
File.openDialog()はファイルが選択された場合はファイルオブジェクトを返します(複数選択可能な場合は配列を返します)。また、キャンセルボタンが押された場合にはnullを返すようになっています。
最後に、フィルター処理が完了した後に保存ダイアログを表示します。ファイル保存ダイアログはFile.saveDialog()を使います。最初の引数にダイアログに表示する文字を指定します。File.saveDialog()はキャンセルボタンが押された場合、nullを返します。
サンプル03は、サンプル02でファイル名を指定していた部分を、ダイアログによる指定に置き換えたものです。なお、サンプル03ではキャンセルボタンが押された時の処理は入っていません。
●サンプル03
#target "Bridge"
var imgPath = File.openDialog("画像ファイルを選択してください", "", false);
var myCanvas = new BitmapData(imgPath);
for(var y=0; y<myCanvas.height; y++){
for(var x=0; x<myCanvas.width; x++){
var colorObj = new Color(myCanvas.getPixel(x, y));
var R = colorObj.red;
var G = colorObj.green;
var B = colorObj.blue;
R = R * 2;
if (R > 255) R = 255;
G = Math.floor(G / 2);
B = Math.floor(B / 2);
var myColor = new Color(R, G, B);
myCanvas.setPixel(x,y, myColor);
}
}
var savePath = File.saveDialog("保存先とJPEG保存ファイル名を指定してください")
myCanvas.exportTo(savePath, 100);