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 件のコメント:
コメントを投稿