基本的に、このコードはソース イメージを取得し、その上にカスタム テキストを描画して、新しいイメージをファイル システムに保存しようとしています。
Windows 7 でコードを実行すると正常に実行されますが、WinXP で実行すると、最初の DrawString の後で imgCopy.Save 行に例外が作成されます。
例外は ArgumentException (パラメーターが無効です) です。WinXP で DrawString が画像を壊すようなものです...?
ビルドは x86/.NET 4.0 ランタイム用です。XPで例外が発生する理由はありますか?
// imgSrc is actually passed into the method with the rec object
// this is just for repro
using (var imgSrc = new System.Drawing.Bitmap(rec.SrcFile))
using (var imgCopy = imgSrc.Clone() as Bitmap)
using (var gImg = Graphics.FromImage(imgCopy)) //shorten var names for this post
{
imgCopy.Save(rec.DstFile, ImageFormat.Jpeg); //Happy here
gImg.SmoothingMode = SmoothingMode.AntiAlias;
imgCopy.Save(rec.DstFile, ImageFormat.Jpeg); //Also no problem
gImg.DrawString(rec.Name, fntArial16, Brushes.Black, new Rectangle(170, 105, 650, 50), sfCenter);
imgCopy.Save(rec.DstFile, ImageFormat.Jpeg); //<-- Fails here
}
編集: パラメータのコード:
private static Font fntArial16 = new Font("Arial", 16, FontStyle.Bold);
private static StringFormat _sfCenter;
private static StringFormat sfCenter {
get {
if (_sfCenter == null) {
_sfCenter = new StringFormat();
sfCenter.Alignment = StringAlignment.Center;
sfCenter.LineAlignment = StringAlignment.Center;
}
return _sfCenter;
}
}