【C#】画像の一部領域の切り出し

画像の一部領域を切り出すには以下の手順で行います。

 

  1. 切り出す領域と同じ大きさのBitmapオブジェクトの作成
  2. BitmapオブジェクトからGraphicsオブジェクトの作成
  3. 作成したGraphicsオブジェクトへ元の部分領域を指定して描画

 

 

この一連の処理をメソッドにまとめました。

/// <summary>
/// Bitmapの一部を切り出したBitmapオブジェクトを返す
/// </summary>
/// <param name="srcRect">元のBitmapクラスオブジェクト</param>
/// <param name="roi">切り出す領域</param>
/// <returns>切り出したBitmapオブジェクト</returns>
public Bitmap ImageRoi(Bitmap src, Rectangle roi)
{
    //////////////////////////////////////////////////////////////////////
    // srcRectとroiの重なった領域を取得(画像をはみ出した領域を切り取る)

    // 画像の領域
    var imgRect = new Rectangle(0, 0, src.Width, src.Height);
    // はみ出した部分を切り取る(重なった領域を取得)
    var roiTrim = Rectangle.Intersect(imgRect, roi);
    // 画像の外の領域を指定した場合
    if (roiTrim.IsEmpty == true) return null;

    //////////////////////////////////////////////////////////////////////
    // 画像の切り出し

    // 切り出す大きさと同じサイズのBitmapオブジェクトを作成
    var dst = new Bitmap(roiTrim.Width, roiTrim.Height, src.PixelFormat);
    // BitmapオブジェクトからGraphicsオブジェクトの作成
    var g = Graphics.FromImage(dst);
    // 描画先
    var dstRect = new Rectangle(0, 0, roiTrim.Width, roiTrim.Height);
    // 描画
    g.DrawImage(src, dstRect, roiTrim, GraphicsUnit.Pixel);
    // 解放
    g.Dispose();

    return dst;
}

 

使用方法は

var bmpRoi = ImageRoi(bmpSrc, new Rectangle(150, 80, 100, 100));

のような感じで。

画像処理のためのC#テクニックへ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください