var bitmap = Base64StrToImage(base64Str);
if (bitmap != null)
{
//創建檔案夾
var folderPath = dir.Substring(0, dir.LastIndexOf('/'));
CreateDir(folderPath);
//圖片后綴格式
var suffix = dir.Substring(dir.LastIndexOf('.') + 1, dir.Length - dir.LastIndexOf('.') - 1).ToLower();
var suffixName = suffix == "png" ? ImageFormat.Png :
suffix == "jpg" || suffix == "jpeg" ? ImageFormat.Jpeg :
suffix == "bmp" ? ImageFormat.Bmp :
suffix == "gif" ? ImageFormat.Gif : ImageFormat.Jpeg;
//這里復制一份對影像進行保存,否則會出現“GDI+ 中發生一般性錯誤”的錯誤提示
var bmpNew = new Bitmap(bitmap);
bmpNew.Save(GetPath(dir), suffixName);//這一句還是會出現GDI+ 中發生一般性錯誤,求大神
bmpNew.Dispose();
bitmap.Dispose();
uj5u.com熱心網友回復:
GDI+ 例外有多重原因,但是拋出的例外都相同,這給排查錯誤帶來不少的困難,這也是非托管物件的特點。從你描述中,有兩點需要注意,你因為發生了 GDI+例外,所以要復制一個物件,這一點需要再考慮。一開始的例外未必是物件沒有復制帶來的,所以復制物件也未必能夠解決。第二點是 new 一個物件是不是真的代表復制,這個也需要看檔案確定。
如果你的 Bitmap 是來源于 Base64,一般來說不需要復制一個物件保存的,因為不會有占用的情況。
我建議還是先找出 GDI+ 例外的真正原因。
uj5u.com熱心網友回復:
我們想知道的是,這里那里來的base64?另外如果他是base64,你有為啥要用bitmap接收一遍。
也就是,如果有個doc檔案,我讀檔案位元組然后base64,傳遞給第3方。那么他為啥要解碼base64到位元組后,用word打開然后再用word save成doc??
難道那個不是檔案,而是bitmap的data?
uj5u.com熱心網友回復:
base64字串直接可以轉換成byte[]吧byte[]直接就換成圖片了..
io.writeallbytes("1.jpg");
后綴名??? 不重要 后綴名只是影響了檔案在windows的打開方式而已...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/41602.html
標籤:C#
上一篇:卡住了,求解!!!定時器事件執行中途跑出事件去執行執行緒是為什么
下一篇:C#讀取exce的資料匯入資料庫
