0

基本的に、このコードはソース イメージを取得し、その上にカスタム テキストを描画して、新しいイメージをファイル システムに保存しようとしています。

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;
    }
}
4

1 に答える 1

1

問題を XMP (Extensible Metadata Platform) データを含む .jpg ファイルに絞り込みました。ファイルからそれを削除すると、WinXP で正しく動作しました。残念ながら、ファイルを生成したツールにはこれを除外するオプションがなかったため、代わりに .png ファイルを使用しましたが、これも問題なく動作します。

于 2012-11-23T01:13:48.300 に答える