はじめに
【Java】簡単な模様を描くのコードを転用して、「簡単な模様の画像」をC#で生成してみました。
コード
- 以下の2つのライブラリを使うと、ラスター形式の画像(BMP,JPG,PNGなど)を操作することができます。
- System.Drawing;
- using System.Drawing.Imaging;
- 所望の座標のピクセルに対する色付けは、SetPixelメソッドを使います。
{Bitmapオブジェクト}.SetPixcel(x座標,y座標,色)
- 生成した画像の保存は、Saveメソッドを使います。
{Bitmapオブジェクト}.Save({保存先のパス}, {画像の形式})
- 余談ですが、System.Drawingは「GDI+」というグラフィックサブシステムを利用しているそうです。
- System.DrawingのAPIを見ると、「GDI+の基本的なグラフィックス機能を使用できるようにします」と書かれています。
ImageCreator.cs
public class ImageCreator
{
/// <summary>
/// バツ印の画像を生成する。
/// </summary>
/// <param name="size">画像の縦・横のサイズ。px数を指定する。</param>
public static void CreateCrossMark(int size)
{
Bitmap bmp = new Bitmap(size, size);
// 全ピクセルに色付け
for (int row = 0; row < size; row++)
{
for (int col = 0; col < size; col++)
{
if (row == col || row + col == size - 1)
{
bmp.SetPixel(col, row, Color.White);
}
else
{
bmp.SetPixel(col, row, Color.Black);
}
}
}
bmp.Save(@"C:\image\cross_mark.png", ImageFormat.Png);
}
}
生成された画像
- 以下のように「黒地に白のバツ印」の画像を生成できました。
- CreateCrossMarkメソッドの引数の値を変えることで、大小様々なサイズの画像を生成できました。
まとめ
- 単純な画像を生成するだけであれば、Bitmapクラスを使うことで比較的簡単に実装できます。
- ただし、Bitmapオブジェクトに対する操作は低速なので、Bitmapオブジェクトに対する操作の回数を極力減らすのが高速化のポイントになります。
- また、画像のリソースの解放処理をきちんとしておかないと、実用に耐えうるコードにはならないようです。
- .NETでBitmap、BitmapDataを扱う場合の例外処理について
- Windowsフォームアプリケーションでリソースリークしないために(1)
- UWPメモ その5 UWP/WPFで画像オブジェクトに対する解放処理は不要なのか