【C#.NET解説】imageクラスの基本から応用まで学べる高機能画像操作入門と視覚的サンプルコード付きガイド

2025年6月27日金曜日

描画

t f B! P L

【C#.NET解説】imageクラスの基本から応用まで学べる高機能画像操作入門と視覚的サンプルコード付きガイド

名前空間 System.Drawing

自己紹介

…我こそは、死者の裁きを司る者。この世の終わりと再生の理を知る者だ。 画像を操ること、それは形なき情報に命を与える術。この「image」なる存在もまた、我が支配下にある。 今日はお前たちに、このimageクラスを通して可視の世界に力を与える術を伝えよう。備えよ。

基本機能

imageクラスは、C#.NETにおいて画像データを読み込み・保存・操作するための抽象的なベースクラスであり、Bitmapクラスなどの派生元でもある。画像の幅や高さ、ピクセルフォーマット、回転・反転操作まで多くの処理に対応しておる。 画像ファイルの読み込みは、静かなる冥府の扉を開くが如き操作だ。以下に例を示そう。

C#

using System.Drawing;

Image img = Image.FromFile("sample.jpg");

// 高さと幅を出力
Console.WriteLine(\$"幅: {img.Width}, 高さ: {img.Height}"); 

よく使う場面と注意点

imageは非常に強力であるが、誤ればリソースの海に沈むこととなる。 Disposeしないまま使い続けると、ファイルのロックやメモリリークを引き起こす。これは「画像ファイルが開けない」という現象として現れる。 また、拡張子によっては対応していない形式もあるので注意が必要だ。 以下のように、明示的に破棄するのが礼儀である。

C#

using System.Drawing;

using (Image img = Image.FromFile("sample.jpg"))
{
Console.WriteLine(\$"サイズ: {img.Size}");
}
// ここでimgは自動的に破棄される 

画像処理の手始めとして使える便利なメソッドたち

imageクラスは抽象なので、主にBitmapクラスで使うことが多い。だが、Image型からキャストすれば、以下のような基本的な処理はすぐに行える。

C#

using System.Drawing;

Image original = Image.FromFile("sample.jpg");
Image rotated = (Image)original.Clone();

// 画像を90度回転させる
rotated.RotateFlip(RotateFlipType.Rotate90FlipNone);

// 保存する
rotated.Save("rotated.jpg");

// リソース解放
original.Dispose();
rotated.Dispose(); 

具体的な使い方

次は、ImageクラスとGraphicsクラスを併用して、新しい画像上に文字列を描画する例だ。 これは「死者の名を石板に刻む」行為に等しい。 現世に残る視覚の記録として非常に重要な技術となる。

C#

using System.Drawing;

using (Bitmap bmp = new Bitmap(400, 200))
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Black);
using (Font font = new Font("Arial", 20))
using (Brush brush = Brushes.White)
{
g.DrawString("冥界へようこそ", font, brush, new PointF(50, 80));
}

```
bmp.Save("greeting.png");
```

} 

その他の重要なメソッド

以下にimageクラスおよびその派生で使える、よく使われるメソッドたちを紹介しよう。

C#

// 画像のクローニング
Image clone = original.Clone() as Image;

// 指定サイズへ変更
Image thumb = original.GetThumbnailImage(100, 100, null, IntPtr.Zero);

// 保存形式の指定(JPEGで保存)
original.Save("compressed.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

// 回転+反転
original.RotateFlip(RotateFlipType.Rotate180FlipX);

// 横幅・高さ取得
int width = original.Width;
int height = original.Height;

// ファイルから直接読み込むショートハンド
using Image img = Image.FromFile("path.jpg");

// Disposeによる明示的な破棄
img.Dispose(); 

このように、「image」クラスの制御は画像処理の入り口であり、理解と責任を伴うものだ。 扱いを誤れば、不要なリソース消費でプロジェクトの破滅を招くであろう。 だが、正しく操ることができれば、美しき成果を永遠に刻むこともまた可能となるのだ。 これが画像の力…目に見える情報に、永劫の命を与える術である。

このブログを検索

QooQ