選択した部分と同じ色を塗りつぶす処理を考えます。ペイントのこの部分と同じ処理です。

FillColorクラス

塗りつぶしの処理をするFillColorクラスを作成します。FormXクラスのなかに長々と書くとそれだけでクラスが大きくなってあとでみたときにわかりにくくなるからです。

コンストラクタとプロパティを示します。引数としてもとの画像とImageEditPictureBoxに表示される画像の両方を同時に変更できるようにコンストラクタの引数として渡しておきます。

クリックされた部分とつながったセルを取得する

クリックされた部分とつながった同じ色のピクセル座標を取得したい場合、再帰処理をつかったほうがスマートなのかもしれませんが、ここではBitmapをコピーしてクリックされた部分とつながった同じ色をリストに格納していくやり方を採用します。

取得したセルの情報を反映させる

最後に取得したセルの情報を反映させれば処理は完了です。

選択された色で囲まれている部分を塗りつぶす

ところで写真に対してこの処理をすると複数のセルの色が変更されることはほとんどありません。同じ色のように見えるだけで微妙に異なる色が並んでいるからです。

写真の一部を矩形や多角形で囲んで内部を別の色で塗りたくなることもあるかもしれません。Paintでこの処理をする場合、矩形の場合は範囲選択してその部分をクリアして塗りつぶしの処理をすればいいのですが、不規則な多角形の場合はこれができません。

そこで選択された色で囲まれている部分全体を選択された色で塗りつぶす方法を考えます。ただしこの処理は選択された色で囲まれている図形のなかに途中で1ピクセルでも欠けた部分があると、全体が塗りつぶされてしまうので使うときは注意が必要です。

あとはForm2クラスから呼び出せるようにするだけです。