画像(Bitmap)の上下、左右反転、および90°、180°、270°の回転はImageクラスのRotateFlipメソッドを使うと簡単に行う事ができます。
上記プログラムの一部抜粋
// 表示する画像の読み込み
var bmpOriginal = new Bitmap("image.jpg");
// オリジナル画像(RotateNoneFlipNone)
picRotateNoneFlipNone.BackgroundImage = bmpOriginal;
// 上下反転画像(RotateNoneFlipY)
var bmpRotateNoneFlipY = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotateNoneFlipY.RotateFlip(RotateFlipType.RotateNoneFlipY);
picRotateNoneFlipY.BackgroundImage = bmpRotateNoneFlipY;
// 左右反転画像(RotateNoneFlipX)
var bmpRotateNoneFlipX = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotateNoneFlipX.RotateFlip(RotateFlipType.RotateNoneFlipX);
picRotateNoneFlipX.BackgroundImage = bmpRotateNoneFlipX;
// 上下左右反転画像(RotateNoneFlipXY)
var bmpRotateNoneFlipXY = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotateNoneFlipXY.RotateFlip(RotateFlipType.RotateNoneFlipXY);
picRotateNoneFlipXY.BackgroundImage = bmpRotateNoneFlipXY;
// 90°回転画像(bmpRotate90FlipNone)
var bmpRotate90FlipNone = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotate90FlipNone.RotateFlip(RotateFlipType.Rotate90FlipNone);
picRotate90FlipNone.BackgroundImage = bmpRotate90FlipNone;
// 180°回転画像(Rotate180FlipNone)
var bmpRotate180FlipNone = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotate180FlipNone.RotateFlip(RotateFlipType.Rotate180FlipNone);
picRotate180FlipNone.BackgroundImage = bmpRotate180FlipNone;
// 270°回転画像(Rotate270FlipNone)
var bmpRotate270FlipNone = (Bitmap)bmpOriginal.Clone(); // 画像のコピー
bmpRotate270FlipNone.RotateFlip(RotateFlipType.Rotate270FlipNone);
picRotate270FlipNone.BackgroundImage = bmpRotate270FlipNone;
回転や左右反転はRotateFlipTypeというenumで定義されているので、上下、左右反転、90°、180°、270°の回転の組み合わせで指定することができます。
(参考)
https://msdn.microsoft.com/ja-jp/library/system.drawing.rotatefliptype(v=vs.110).aspx
この方法ですが、個人的には以下のような場合に使用しています。
●カメラを90°回転させて配置させたときの画像の90°回転表示
●カメラ画像取り込み用のライブラリを使ったとき、画像の上下が反転している場合の上下反転
●機械学習用画像登録時、上下、左右反転、回転をした画像のデータ増し
など
←画像処理のためのC#へ戻る
ピンバック: 画像のフリップ (Image Flipping) | CVMLエキスパートガイド