C#でラスタ画像を描いてみた
C#で画像処理の練習として、ラスタ画像(ビットマップイメージ)を描いてみました。 試した環境は下記です。
Visual Studio 2015 Express for Windows Desktop
目次
- 処理の流れ
- System.Drawing.dllへの参照の追加
- Bitmapクラス
- Bitmap.SetPixel()メソッド
- Bitmap.Save()メソッド
- Color構造体
- Color.FromArgb()メソッド
- 試してみた
処理の流れ
WPFでラスタ画像を扱うときにこの方法が適切かどうかわからないのですが、System.Drawing名前空間を使ってみます。これが独学のつらいところですね。
Bitmapクラスのインスタンスを作る。
Color構造体のオブジェクトを作って、それに色の情報を設定する。
Bitmap.SetPixel()メソッドで、Bitmapクラスのインスタンスの画素毎に色情報を設定する。
System.Drawing.dllへの参照の追加
System.Drawing名前空間を使用するには、System.Drawing.dllへの参照の追加が必要です。 ソリューションエクスプローラーの参照を右クリックして「参照の追加」を選びます。 ダイアログが開いたら、「アセンブリ」→「フレームワーク」と選択して、System.Drawingにチェックマークを付けて、「OK」をクリックします。チェックマークを付けるのを忘れないでください。 参照を追加すると、usingで名前空間を追加できたり、BitmapクラスやColor構造体が使えるようになります。
Bitmapクラス
Bitmapクラスはラスタ画像用の処理をするクラスです。画像の大きさを指定して空のインスタンスを作ったり、ファイルやストリームからインスタンスを作ることができます。 今回使うコンストラクターは下記です。
Bitmap bitmap = new Bitmap(width, height);
引数 |
型 |
内容 |
---|---|---|
width |
Int32 |
ビットマップ画像の幅方向の画素数 |
height |
Int32 |
ビットマップ画像の高さ方向の画素数 |
Bitmap.SetPixel()メソッド
Bitmap.SetPixel()メソッドは、Bitmapクラスのインスタンスの画素(ピクセル)の色を指定するメソッドです。
Bitmap.SetPixel(x, y, color)
引数 |
型 |
内容 |
---|---|---|
x |
Int32 |
設定する画素のX座標 |
y |
Int32 |
設定する画素のY座標 |
color |
Color構造体 |
設定する画素の色情報 |
戻り値はありません。 ビットマップ画像のXY座標は、左上端の画素が(X,Y)=(0,0)になります。
Bitmap.Save()メソッド
Image.Save(filename, format)メソッドからの継承です。画像をファイルやストリームに保存するメソッドです。 保存方法に依って何種類かの引数のパターンがあるのですが、今回はファイルに保存するために下記を使用します。
Bitmap.Save(filename, format)
引数 |
型 |
内容 |
---|---|---|
filename |
string |
保存先のファイル名。 |
format |
ImageFormatクラスのプロパティ |
ファイルフォーマット。 |
戻り値はありません。保存先にすでにファイルが存在する場合は、上書きされます。
Color構造体
Color構造体は、ARGBの色情報を表す構造体です。
Color.FromArgb()メソッド
Color.FromArgb(alpha, red, green, brue)メソッドは、色の具体的な情報からColor構造体を作るメソッドです。引数の指定の仕方によってARGBの32bit値や既存のColor構造体から新しいColor構造体を作ったりもできるのですが、今回はARGBのそれぞれの値を指示してColor構造体を作るメソッドを使います。
Color color = Color.FromArgb(alpha, red, green, blue)
引数 |
型 |
内容 |
---|---|---|
alpha |
int |
0~255。透明度です。0が透明、255が不透明です。 |
red |
int |
0~255。赤です。 |
green |
int |
0~255。緑です。 |
blue |
int |
0~255。青です。 |
戻り値は、Color構造体です。
試してみた
何を作るか
512x100の大きさで、横方向に黒から白へのグラデーションを描き、それをPNGファイルとして保存します。
コード
コードは下記の様にしました。
using System;
using System.Windows;
using System.Drawing;
using System.Drawing.Imaging;
namespace image_trial2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
int width = 512;
int height = 100;
Bitmap bitmap = new Bitmap(width, height);
for (int x = 0; x < width; x++)
{
int value = (int)Math.Floor((double)x / ((double)width / 256));
System.Drawing.Color color = System.Drawing.Color.FromArgb(255, value, value, value);
for (int y = 0; y < height; y++)
{
bitmap.SetPixel(x, y, color);
}
}
string filename = @"ファイル名";
bitmap.Save(filename,ImageFormat.Png);
}
}
}
本当はコンソールアプリで十分なのですが、無駄にWPFになってます。ウィンドウで操作するものはありません。 「最初にx=0の列を上から下まで塗って、次にx=1の列を・・・」という感じで、x=511まで1列毎に画素の色を指定してみました。Bitmap(width, height)で方眼紙を作って、Color.FromArgb(alpha, red, green, blue)で塗料を混ぜて、SetPixel(x, y, color)で1マス毎に塗りつぶしていくような感じでしょうか。
公開日
広告
C#で画像処理カテゴリの投稿
- C#でBitmapImageをByte配列に変換してみた
- C#でBitmapで描いた画像をImageコントロールに表示してみた
- C#でHSBで色指定してラスタ画像を描いてみた
- C#でOpenCVを使う
- C#でラスタ画像を描いてみた
- C#で写真の中の線を抽出してみた
- C#で描いた画像をファイルに保存してみた
- C#で画像の色を反転してみた
- C#で画像を描いてみた(WPFでBitmapSource.Create編)
- C#で画像を描いてみた(WPFでWritableBitmap編)
- C#で画像ファイルを表示してみた
- C#のOpenCvSharpでMatとBitmapSourceを変換する
- C#のWPFアプリでPNG形式の画像ファイルの読み込みと書き出しをする