画像の一部領域を切り出すには以下の手順で行います。
- 切り出す領域と同じ大きさのBitmapオブジェクトの作成
- BitmapオブジェクトからGraphicsオブジェクトの作成
- 作成した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#テクニックへ戻る