GDI+中發生一般性錯誤的解決辦法

在開發.NET應用中,使用 System.Drawing.Image.Save 方法而導致“GDI+ 中發生一般性錯誤”的發生,通常有以下三種原因:
1. 指定的物理路徑不存在。
解決方法:
在調用 Save 方法之前,先判斷目錄是否存在,若不存在,則創建。
if (!Directory.Exists(dirpath))
Directory.CreateDirectory(dirpath);
2. 保存的文件已存在並因某種原因被鎖定。
解決方法:

      解除鎖定。並在代碼中使用 using 語句,確保釋放 Image 對象所使用的所有資源。


此解決辦法在索引格式創建一個 Bitmap 對象:
1.    構造從流、 從內存, 或從文件原始 位圖 。
2.    創建新 位圖 具有相同的大小和像素格式作爲首 位圖 。
3.    使用 Bitmap.LockBits() 方法來鎖定整個圖像對於兩 Bitmap 對象以其本機像素格式。
4.    使用 Marshal.Copy 函數或其他內存複製函數來從首 位圖 複製到二 位圖 圖像位。
5.    使用 Bitmap.UnlockBits() 方法可以解鎖兩 Bitmap 對象。
6.    用於 Bitmap.Dispose() 是首 位圖 處置。


private void ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //創建一個bitmap類型的bmp變量來讀取文件。
                Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
                //新建第二個bitmap類型的bmp2變量,我這裏是根據我的程序需要設置的。
                Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
                //將第一個bmp拷貝到bmp2中
                Graphics draw = Graphics.FromImage(bmp2);
                draw.DrawImage(bmp,0,0);
                pictureBox1.Image = (Image)bmp2 ;//讀取bmp2到picturebox
                FILE = openFileDialog1.FileName;
                openFileDialog1.Dispose();
                draw.Dispose();
                bmp.Dispose();//釋放bmp文件資源
            }
        }
通過以上的讀取文件,在保存的時候就不會出現錯誤了。

發佈了42 篇原創文章 · 獲贊 108 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章