DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

画像を回転、反転して表示する

注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。

Image.RotateFlipメソッドによる方法

ImageクラスのRotateFlipメソッドを使用することにより、画像の回転、反転を行うことが出来ます。RotateFlipメソッドでは、回転は90度、180度、270度を、反転は水平方向、垂直方向、その両方を指定できます。

以下の例では、画像(test.bmp)を180度回転、水平方向に反転して、ピクチャボックス(PictureBox1)に表示しています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

Dim bmp As Bitmap =  New Bitmap("test.bmp") 
'180度回転して、水平方向に反転
'"Rotate180FlipX"の"Rotate180"は180度回転することを意味し、
'"FlipX"は水平方向に反転することを意味する
bmp.RotateFlip(RotateFlipType.Rotate180FlipX)
'表示
PictureBox1.Image = bmp
C#
コードを隠すコードを選択
//using System.Drawing;

Bitmap bmp = new Bitmap("test.bmp");
//180度回転して、水平方向に反転
//"Rotate180FlipX"の"Rotate180"は180度回転することを意味し、
//"FlipX"は水平方向に反転することを意味する
bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
//表示
PictureBox1.Image = bmp;

幅、高さに負の整数を指定する方法

また、画像を描画するときに反転させるには、Graphics.DrawImageメソッドで描画先(または元のイメージ)の領域の指定で、幅または高さの値をマイナスにするという方法もあります。幅をマイナスにすると水平方向に、高さをマイナスにすると垂直方向に反転します。

この時、描画先(または元のイメージ)の位置に注意する必要があります。つまり例えば幅の値をマイナスにしたときは、その分描画位置をX座標方向にプラスしなければ正常な位置に描画されません。

次の例は画像を水平方向に反転させていますが、幅を"-img.Width"としているため、この画像を(0, 0)の位置に描画するためには、描画先の位置を(img.Width, 0)とする必要があります。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'描画先とするImageオブジェクトを作成する
Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
'ImageオブジェクトのGraphicsオブジェクトを作成する
Dim g As Graphics = Graphics.FromImage(canvas)

'画像を読み込む
Dim img As Image = Image.FromFile("test.bmp")

'画像を水平方向に反転して描画する
'座標(0, 0)に描画するために、描画位置のX座標をimg.Widthにしている
g.DrawImage(img, img.Width, 0, -img.Width, img.Height)

'Graphicsオブジェクトのリソースを解放する
g.Dispose()

'PictureBox1に表示する
PictureBox1.Image = canvas
C#
コードを隠すコードを選択
//using System.Drawing;

//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);

//画像を読み込む
Image img = Image.FromFile("test.bmp");

//画像を水平方向に反転して描画する
//座標(0, 0)に描画するために、描画位置のX座標をimg.Widthにしている
g.DrawImage(img, img.Width, 0, -img.Width, img.Height);

//Graphicsオブジェクトのリソースを解放する
g.Dispose();

//PictureBox1に表示する
PictureBox1.Image = canvas;

より複雑な回転、反転

より複雑な回転、反転は、「画像を傾けて表示する」や「ワールド変換により画像を平行移動、拡大、縮小、回転して表示する」の方法により可能です。

  • 履歴:
  • 2012/8/1 表示する方法を、PictureBox.Imageプロパティを使った方法に変更。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。