|
Bitmapを中心点と角度を指定して回転するサンプル(C#.NET)

|
<このサンプルの概要>
.NETのBitmapを中心点の座標と角度を指定して回転するサンプルを作ってみました。
このサンプルのポイントとなるキーワードは以下の通りです。
(1)Graphics
(2)TranslateTransform
(3)RotateTransform
(4)MatrixOrder.Append
(5)DrawImageUnscaled
Bitmapを中心座標と角度を指定して回転するサンプル(Form1.cs)
namespace RotateBitmap
{
public partial class Form1 : Form
{
/// <summary>
/// オリジナルBitmap
/// </summary>
private Bitmap org = null;
/// <summary>
/// 現在の回転角度
/// </summary>
private float ang = 0;
/// <summary>
/// フォームロード
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
private void Form1_Load(object sender, EventArgs e)
{
// オリジナルBitmapの取得
Bitmap bmp = new Bitmap("test.jpg");
org = new Bitmap(bmp, 512, 512);
bmp.Dispose();
// オリジナルBitmapをpictureBoxに設定
pictureBox1.Image = org;
}
/// <summary>
/// ボタンクリック
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
private void button1_Click(object sender, EventArgs e)
{
// ビットマップ(Bitmap)を回転する
ang += 5;
pictureBox1.Image = RotateBitmap(org, ang, 100, 200);
}
/// <summary>
/// ビットマップ(Bitmap)を回転する
/// </summary>
/// <param name="bmp">ビットマップ</param>
/// <param name="angle">回転角度</param>
/// <param name="x">中心点X</param>
/// <param name="y">中心点Y</param>
/// <returns></returns>
public Bitmap RotateBitmap(Bitmap bmp, float angle, int x, int y)
{
Bitmap bmp2 = new Bitmap((int)bmp.Width, (int)bmp.Height);
Graphics g = Graphics.FromImage(bmp2);
g.Clear(Color.Black);
g.TranslateTransform(-x, -y);
g.RotateTransform(angle, System.Drawing.Drawing2D.MatrixOrder.Append);
g.TranslateTransform(x, y, System.Drawing.Drawing2D.MatrixOrder.Append);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
g.DrawImageUnscaled(bmp, 0, 0);
g.Dispose();
return bmp2;
}
}
}