[英]A Generic error occurs at GDI+ at Bitmap.Save() after using SaveFileDialog
我在 using 塊中使用以下代碼塊和更多代碼:
using (System.Drawing.Bitmap tempImg =
(System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap))
{
// ...
tempImg.Save("..\\..\\testdata\\tempImg.bmp", ImageFormat.Bmp);
// ...
}
但我仍然得到錯誤:
GDI+ 發生一般錯誤
只有在我做了一些與 using 塊內的代碼無關的操作之后。 在其他時候,這很好用。 tempImg.bmp 也是一個臨時文件,所以我在 using 塊本身中刪除了 tempImg.bmp。
由於 tempImg 在 using 內部並且它已被處理,我認為應該解決鎖定問題。
有人可以讓我知道這段代碼有什么錯誤嗎?
編輯: System.Drawing.Image
到System.Drawing.Bitmap
作為tempImg
的類型。
編輯:我已經確定只有在創建 SaveFileDialog 並且用戶單擊“保存”后才會收到此錯誤。
最后我可以在我的代碼中找到錯誤並想在這里提及它,因為我認為它可能對某人有用......
由於我在 tempImg.Save 中給出了相對路徑,並且用戶在 SaveFileDialog 中單擊“保存”后,tempImg.Save 的實際路徑變為:
SaveFileDialog 指定的路徑 + 相對路徑
自動地。
因此,如果路徑不存在,則會發生此錯誤。
謝謝大家的回答。
我也遇到過這個問題 - 它發生是因為 bitmap 鎖定並且你無法保存它(如果你想我可以找到確切的解釋)所以無論如何解決方法是這樣的:創建一個新的 bitmap 大小為原始 Z86BB33755028458AF74F8將原來的 bitmap 復制到新創建的 bitmap,然后處理原來的 bitmap 並保存新的。
Bitmap bm3 = new Bitmap(bm2);
然后保存。
這通常表明其他東西,可能是您自己的應用程序中的其他線程,已經將您嘗試保存的目標文件鎖定在文件系統級別。 如果您查看內部異常,我相信它應該提到這一點。 如果它不是直接在 InnerException 中確認這一點的另一種方法(或發現它可能實際上是什么)是在調試器中打開第一次機會異常並觀察在“下方”拋出什么異常保存,然后變成這個通用異常。
嘗試了這里給出的所有解決方案,但徒勞無功。 最終找到了解決方案。
g.dispose();
System.IO.Directory.Exists(dir);
GDI+ 處 Bitmap 出現一般錯誤。當文件夾受保護或文件名無效時,通常會收到 Save()。
一個常見的錯誤是忘記命名,只寫文件夾名稱。
在我的情況下,它是一個 ASP.NET 應用程序,我在其中替換了一個 DLL,並且我必須在部署后簡單地重新啟動應用程序池。 然后它工作得很好。
這是 ASP.NET 應用程序嗎?
asp.net 中的 GDI+ 發生一般錯誤,主要是因為缺少目標文件夾/訪問權限。
您的代碼也可以簡化為:
using (Image image= dataObject.GetImage())
{
if (image != null)
{
image.Save("test.bmp");
}
}
我正在嘗試從資源中保存圖像,當我直接使用方法 Bitmap.Save(filepath) 時,它也給了我 GDI 錯誤。 我認為我們可以通過克隆它來對任何其他 bitmap 圖像使用相同的以下代碼。
Private void SaveResourceImage() {
object resBmpObject = Resource.Image1.Clone();//Bitmap Image from resource file
//object resBmpObject = anyBmpImage.clone(); //for image other than resource image
Bitmap resBmpImage = (Bitmap)resBmpObject;
resBmpImage.Save(destFilePath, System.Drawing.Imaging.ImageFormat.Png);
resBmpImage.dispose();
}
保存圖像后處理您的bitMap
object:
bitMap.Dispose()
oimg.Dispose()
bitMap = Nothing
oimg = Nothing
就我而言,我將 bitmap 文件保存在與源相同的位置,所以這就是問題所在。 我將 bitmap 保存到新位置,現在一切正常。
我遇到了同樣的問題,通過將圖像類型“.bmp”更改為“.png”它的工作形式我
這是來自 Microsoft 論壇的代碼示例。
// new image with transparent Alpha layer
using (var bitmap = new Bitmap(330, 18, PixelFormat.Format32bppArgb))
{
using (var graphics = Graphics.FromImage(bitmap))
{
// add some anti-aliasing
graphics.SmoothingMode = SmoothingMode.AntiAlias;
using (var font = new Font("Arial", 14.0f, GraphicsUnit.Pixel))
{
using (var brush = new SolidBrush(Color.White))
{
// draw it
graphics.DrawString(user.Email, font, brush, 0, 0);
}
}
}
// setup the response
Response.Clear();
Response.ContentType = "image/png";
Response.BufferOutput = true;
// write it to the output stream
bitmap.Save(Response.OutputStream, ImageFormat.Png);
Response.Flush();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.