
目次
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);