Vectorに登録した「画像ファイルの色を置換したい」を改良する(1)の続きです。

複数のファイルをまとめて処理する

[複数のファイル]ボタンがクリックされたら複数のファイルを選択することができるダイアログを表示させます。複数のファイル(単数でももちろん可)が選択されたときに、それらのファイルに対して色置換の処理をおこなう処理を示します。

出力先フォルダは選択されたファイルがあるフォルダがあるフォルダ内に処理が開始された時刻を名前とするフォルダを作成して、それを使います。

色置換をするメソッドを示します。第一引数は処理の対象となるファイル、第二引数は保存するパスです。ファイルのなかには画像ファイルではないものもある可能性があるため、例外処理をしています。

指定されたフォルダ内のファイルをまとめて処理する

[フォルダ単位]ボタンがクリックされたらフォルダを選択するダイアログを表示させます。フォルダが選択されたときに、そのなかにあるファイル(サブフォルダ内のファイルも含む)に対して色置換の処理をおこなう処理を示します。

フォルダの場合はちょっと面倒です。そこで処理前のファイルのパスと処理後のファイルのパスを登録した辞書をつくります。

引数は処理の対象となるフォルダのパスと保存されるフォルダの名前(名前であってパスではない)です。処理の対象となるファイルのパスと処理後に保存するパスは途中までは同じなので文字列置換でいらない部分を削除して結合させています。

注意することとして親フォルダが存在するときは Directory.GetParent(selectedFolderPath).FullName;が返す文字列の最後に’\’はつかないけれど、そうでない場合は”C:\”のように後ろに’\’がついてしまうことです。

FolderBrowserDialogを表示させて選択されたフォルダ内の画像ファイルに対する色置換をする処理の部分を示します。

ドラッグアンドドロップ時の処理

ドラッグアンドドロップされた場合はチェックボックスの状態で処理をわけます。チェックされているときは上記の方法で、
複数のファイルとフォルダ内のファイルに対する処理をおこないます。チェックがされていない場合はメニューの[ファイルを開く]と同じ処理をおこないます。

ドラックされているときの処理を示します。

ここではドラッグされているものがファイルかフォルダのときとそうでないときのマウスカーソルの形状を変えます。

ドロップされたらチェックボックスの状態となにがドロップされたのかを調べて適切な処理をおこないます。