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