.NET TIPS 画像の一部の領域を切り抜くには?[C#、VB]デジタルアドバンテージ 一色 政彦2009/08/13 |
![]() |
|
画像の不要な部分をカットしたいなどの目的で、画像の中の一部の領域を切り抜きたい場合がある。
このような場合には、まずBitmapクラス(System.Drawing名前空間)のオブジェクトを作成する。これには、画像を読み込んだり(参考「TIPS:画像を読み込むには?」)、画面キャプチャで画像データを取得したり(参考「TIPS:スクリーンやウィンドウをキャプチャするには?」)すればよい。
画像の切り抜きにはいくつかの方法があるが、BitmapオブジェクトのCloneメソッドを使うと少ない手順で可能だ。Cloneメソッドの第1パラメータにはRectangle構造体(System.Drawing名前空間)のオブジェクトを、第2パラメータにはPixelFormat列挙体(System.Drawing.Imaging名前空間)の値を指定する。
Rectangleオブジェクトは、切り抜く四角形の領域を示す。Rectangleオブジェクトを生成するコンストラクタのパラメータには、
- 四角形の左上隅のX座標
- 四角形の左上隅のY座標
- 四角形の幅
- 四角形の高さ
を順に指定する。
PixelFormat値は、画像のピクセル・データ形式を示す(最も代表的な値は、「R:赤」「G:緑」「B:青」のそれぞれの色で8bitずつ使用して、合計24bitが1ピクセルとなる形式の「PixelFormat.Format24bppRgb」)。実際には、現在のBitmapオブジェクトのPixelFormat値は、PixelFormatプロパティで取得できるので、これを使う(※元画像と異なるピクセル値を指定した場合、切り抜き後の画像が劣化したり、ひどい場合はOutOfMemoryException例外が発生したりするので、必ずこれを使うこと)。
以上の内容を踏まえてサンプルを作成してみよう。次のコードは、画像を切り抜いて別画像として保存するコンソール・アプリケーションのサンプルだ(※画像の保存方法に関しては「TIPS:画像をファイルに保存するには」を参照されたい)。
|
||
画像の一部の領域を切り抜くコンソール・アプリケーションのサンプル・コード | ||
System.Drawingアセンブリへの参照を追加する必要がある。 |
次の画像は、上記のサンプルを実行した結果で、切り抜き前と切り抜き後の画像だ。
![]() |
![]() |
![]() |
上記のサンプルを実行した結果(上:切り抜き前の画像、下:切り抜き後の画像) |
注意点として、Bitmapオブジェクトは使い終わったら、必ずDisposeメソッドを呼び出して画像リソースを解放するのが好ましい。これを行わない場合、GC(ガベージ・コレクタ)がリソースを解放してくれるまで、読み込んだ画像ファイルにロックがかかったり、メモリ上から消えずに空きメモリ領域を圧迫したりするためだ。
カテゴリ:クラス・ライブラリ 処理対象:ビットマップ 使用ライブラリ:Bitmapクラス(System.Drawing名前空間) 使用ライブラリ:Rectangle構造体(System.Drawing名前空間) 使用ライブラリ:PixelFormat列挙体(System.Drawing.Imaging名前空間) 使用ライブラリ:OutOfMemoryExceptionクラス(System名前空間) 関連TIPS:画像を読み込むには? 関連TIPS:スクリーンやウィンドウをキャプチャするには? 関連TIPS:画像をファイルに保存するには |
|
![]() |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
||
|
||
![]() |