2012-11-21 43 views
0

基本上,代碼試圖獲取源圖像,在其上繪製一些自定義文本並將新圖像保存到文件系統。僅限WinXP Bitmap.Save ArgumentException參數無效

當我在Windows 7中運行代碼時,它運行良好,但是當我在WinXP中運行它時,它會在第一個DrawString之後的任何時候在imgCopy.Save行中創建一個異常。

ArgumentException異常(參數無效)。這就像DrawString破壞WinXP下的圖像...?

該構建適用於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; 
    } 
} 
+0

原始文件的格式是什麼? – K3N

+0

請注意:平滑不適用於文本。爲文本使用'gimg.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias;'。 – K3N

+0

對不起,這也是一個jpg文件。謝謝,我會改變TextRenderHint。 – Cheval

回答

1

我們將問題範圍縮小到包含XMP(可擴展元數據平臺)數據.jpg文件。一旦我們從文件中刪除它,它就可以正確處理WinXP。不幸的是,生成該文件的工具沒有排除此選項的選項,所以我們使用.png文件,而且工作正常。