C# 画像処理

目次

C#での画像操作


C#の画像操作は、Bitmapクラス、Graphicsクラスをメインで利用します。

画像サイズ変更


画像サイズを変更するためのサンプルソース
※Width(横幅サイズ)を1000に固定し、同じ比率でHight(縦幅サイズ)を変更する

//---------------------------------------------------------
// 画像サイズ変更
//---------------------------------------------------------
double sizeRate = (double)bmpBase.Width / (double)1000;

if (sizeRate == 0)
{
    sizeRate = 1;

}

int width = (int)(bmpBase.Width / sizeRate);
int height = (int)(bmpBase.Height / sizeRate);
Bitmap bmpResize = new Bitmap(bmpBase, width, height);

画像の切抜


画像ファイルの一部を切抜くサンプルソース

//---------------------------------------------------------
// 画像を切り抜く
//---------------------------------------------------------
Rectangle rect = new Rectangle(0, (int)(height-400)/2, width, 400);
Bitmap bmpTrime = bmpBase.Clone(rect, bmpBase.PixelFormat);

画像への文字列表示(DrawStringを利用)


画像への文字列表示のサンプルソース

//---------------------------------------------------------
// 文字列表示(DrawStringを利用)
//---------------------------------------------------------
Graphics g = Graphics.FromImage(bmpTrime);
g.DrawImage(bmpTrime, 0, 0, bmpTrime.Width, bmpTrime.Height);

// 表示文字列取得
string drawString = rtxtString.Text;

//Fontを作成
Font fnt = new Font("MS ゴシック", 24);

//文字列を表示する範囲を指定する
RectangleF rectStr = new RectangleF(0, 0, bmpTrime.Width, bmpTrime.Height);

//StringFormatを作成
StringFormat sf = new StringFormat();

//文字を真ん中に表示
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;

//文字を書く
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
g.DrawString(drawString, fnt, Brushes.Red, rectStr, sf);

画像への文字列表示(AddStringを利用)


画像への文字列表示のサンプルソース

//---------------------------------------------------------
// 文字列表示(AddStringを利用)
//---------------------------------------------------------
Graphics g = Graphics.FromImage(bmpTrime);
g.DrawImage(bmpTrime, 0, 0, bmpTrime.Width, bmpTrime.Height);

// 表示文字列取得
string drawString = rtxtString.Text;

//GraphicsPathオブジェクトの作成
System.Drawing.Drawing2D.GraphicsPath gp =
    new System.Drawing.Drawing2D.GraphicsPath();

//文字列を表示する範囲を指定する
RectangleF rectStr = new RectangleF(0, 0, bmpTrime.Width, bmpTrime.Height);

var stringFormat = new StringFormat();
// どんなに長くて単語の区切りが良くても改行しない
//stringFormat.FormatFlags = StringFormatFlags.NoWrap;
// どんなに長くてもトリミングしない
stringFormat.Trimming = StringTrimming.None;

// 左右方向は中心寄せ
stringFormat.Alignment = StringAlignment.Center;
// 上下方向は中心寄せ
stringFormat.LineAlignment = StringAlignment.Center; 

// ハイクオリティレンダリング
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
// アンチエイリアスをかける
g.SmoothingMode = SmoothingMode.HighQuality;

//GraphicsPathに文字列を追加する
FontFamily ff = new FontFamily("MS ゴシック");

gp.AddString(drawString, ff, 0, 50,rectStr, stringFormat);

//文字列の中を塗りつぶす
g.FillPath(Brushes.White, gp);
//文字列の縁を描画する
g.DrawPath(Pens.OrangeRed, gp);

画像品質設定 & 画像保存


jpg画像ファイルの画質設定を行い、jpg画像ファイルを行うサンプルソース

//---------------------------------------------------------
//画像品質設定 & 画像保存           
//---------------------------------------------------------
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
System.Drawing.Imaging.Encoder myEncoder =
    System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;

// 変更後ファイル保存
bmpTrime.Save(【ファイルパス】, jpgEncoder, myEncoderParameters);

関連記事


C#