作成した画像を左右反転させたものを作りたいときがあります。そこで左右や上下を反転させたり回転させることができるようにします。また反転・回転の対象も全体、選択されている部分だけに限定するというように両方に対応させます。

まず全体を対象にする場合、範囲選択されていたら解除することにしました。そのあと反転・回転の処理をおこないます。このときにBitmap.RotateFlipメソッドを使います。

bitmap.RotateFlip(RotateNoneFlipX) // 左右反転
bitmap.RotateFlip(RotateNoneFlipY) // 上下反転
bitmap.RotateFlip(Rotate90FlipNone) // 90度回転
bitmap.RotateFlip(Rotate180FlipNone) // 180度回転
bitmap.RotateFlip(Rotate270FlipNone) // 270度回転

まずはパネルの色をつかってBitmapをつくります。

Bitmapからパネルを復元するメソッドもつくります。

反転・回転は以下のメソッドでおこないます。

あとは

RotateFlip(RotateFlipType.RotateNoneFlipX);

とやれば左右反転ができるし、

RotateFlip(RotateFlipType.Rotate90FlipNone);

とやれば90度回転もできます。

次に範囲選択されているときに選択範囲内での反転・回転を考えます。

まず選択されている位置を求めます。以下のメソッドは選択されている部分の矩形を返します。

そして以下のメソッドで反転と回転の処理をおこないます。範囲選択されている場合、元の色に戻せるように元の色を保存しているのですが、これだと枠の部分が反転処理できないので、いったんSelectionXYsをクリアしています。

あとは

SelectionRotateFlip(RotateFlipType.RotateNoneFlipX); // 選択部分だけ左右反転させる
SelectionRotateFlip(RotateFlipType.Rotate90FlipNone); // 選択部分だけ90度回転させる

とやれば処理ができます。