DOBON.NETさんを参考に保存のあたりの処理を加えています。
private void drawString(FileInfo copiedfi,string s,Font font)
{
int quality = 85;
//一時ファイルの作成
string tmpFilename = copiedfi.FullName + ".tmp";
FileInfo tmpFi = copiedfi.CopyTo(tmpFilename, true);
//Bitmapオブジェクトの生成
using (Bitmap bmp = new Bitmap(tmpFi.FullName))
{
//解像度の設定
bmp.SetResolution(72, 72);
//Graphicsオブジェクトを取得
using (Graphics g = Graphics.FromImage(bmp))
{
//画像を描画する
g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
//白のブラシを作成する
using( Brush b = new SolidBrush(System.Drawing.Color.White))
{
//文字の領域サイズを取得する
StringFormat sf = new StringFormat();
SizeF stringSize = g.MeasureString(s, font, bmp.Width, sf);
//文字を描画する
g.DrawString(s, font, b, (bmp.Width / 2) - (stringSize.Width / 2), (bmp.Height / 2) - (stringSize.Height / 2));
}
}
//品質を指定
System.Drawing.Imaging.EncoderParameters eps = new System.Drawing.Imaging.EncoderParameters(1);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
//エンコーダーを取得する
System.Drawing.Imaging.ImageCodecInfo ici = this.getEncoderInfo("image/jpeg");
bmp.Save(copiedfi.FullName, ici, eps);
}
//一時ファイルの削除
if( File.Exists(tmpFilename) )File.Delete(tmpFilename);
}
//MimeTypeで指定されたImageCodecInfoを探して返す
private System.Drawing.Imaging.ImageCodecInfo getEncoderInfo(string mineType)
{
//GDI+ に組み込まれたイメージ エンコーダに関する情報をすべて取得
System.Drawing.Imaging.ImageCodecInfo[] encs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
//指定されたMimeTypeを探して見つかれば返す
foreach (System.Drawing.Imaging.ImageCodecInfo enc in encs)
if (enc.MimeType == mineType)
return enc;
return null;
}
0 件のコメント:
コメントを投稿