のような画像を作成したあと、色を変えて

のようなものも作りたいと考えたことはありませんか?

文字列の「赤白赤白赤白赤白赤白」を「赤青赤青赤青赤青赤青」に一括置換するように画像の色を一括置換できるアプリを作成することにします。

これは画像のなかにある赤を青に一括置換するプログラムです。フォームにドロップするとoutputというフォルダをつくってそこにファイルを出力します。

とりあえず作ってみる

どの色を入れ替えるかを指定できるようにする

ただこれはあまり使い勝手がよくありません。どの色を入れ替えるかを指定できるようにしたいものです。

それでこのようにします。

カラーダイアログを表示してそこから色を選べたり、実際に画像ファイルから色を取得することができるようにしました。

カラーダイアログから設定できるようにする

置換前の色[カラーダイアログから設定]をクリックするとカラーダイアログが表示されます。ここから置換前の色を設定します。

置換後の色[カラーダイアログから設定]をクリックした場合はこのような処理になります。置換前と置換後の色を設定したあとReplaceColorメソッドをつかって画像内にある色を置換します。

ReplaceColorメソッド

ReplaceColorメソッドはこのように変更します。同じ色かどうかはアルファ値は無視して考えます。

画像から置換前の色を設定する

次に実際に存在する画像から置換前の色を設定する方法ですが、別のフォームに画像を表示させ、画像をクリックすることで設定できるようにします。表示されるダイアログはこんな感じです。

まずはフィールド変数とコンストラクタについて。

フィールド変数Imageは画像ファイルのイメージです。Colorは設定したい色です。ピクチャーボックスがクリックされたらイベントハンドラPictureBox1_MouseDownが呼ばれるようにしています。そしてボタンがクリックされたらダイアログを閉じます([OK]がクリックされたときと同じ)。

ダイアログが表示されたらピクチャーボックスに画像ファイルのイメージを表示させます。

ピクチャーボックスがクリックされたらその位置にあるピクセルの色を取得し、もうひとつのピクチャーボックスに表示させます。

[画像ファイルから設定]がクリックされたときのイベントハンドラ

ではもう一度form1のメソッドをみてみましょう。これは置換前の色[画像ファイルから設定]がクリックされたときの処理です。ファイルを開くダイアログで選択されたファイルが画像ファイルではない場合もあるので例外処理をつかっています。