C#如何釋放已經(jīng)加載的圖片,圖片如果加載了不釋放不解除占用會(huì)導(dǎo)致圖片無法修改,包括改名和覆蓋都不行。 使用Image.FromFile取磁盤上的圖片時(shí),這個(gè)方法會(huì)鎖定圖片文件,而且會(huì)導(dǎo)致內(nèi)存占用增大, 有幾種方法解決: 一:將Image類轉(zhuǎn)換成Bitmap類 System.Drawing.Image img = System.Drawing.Image.FromFile(filepath); System.Drawing.Image bmp = new System.Drawing.Bitmap(img); img.Dispose(); 然后使用 bmp作為PictureBox的圖片源 二:從流中讀取 FileStream fileStream = new FileStream("文件名", FileMode.Open, FileAccess.Read); pictureBox1.Image = Image.FromStream(fileStream); fileStream.Close(); fileStream.Dispose(); 原因:一個(gè)圖像對(duì)象從一個(gè)文件構(gòu)造時(shí)該文件仍保留鎖定對(duì)象的生存期。所以關(guān)鍵是要使用 Graphics.DrawImage()方法或Drawing.Bitmap()方法來將映像復(fù)制到新位圖Bitmap對(duì)象,然后Bitmap和Graphics就可以釋放了?;蛘哂檬褂肍ileStream的方式將文件讀成流。 其中DataGridView中添加的圖片 DataGridViewImageCell tupian = new DataGridViewImageCell(); tupian.ImageLayout = DataGridViewImageCellLayout.Stretch; using(Image img =Image.FromFile(string.Format("{0}\\{1}", Application.StartupPath, dr["picpath"])) ) { //解除占用 Image im = new Bitmap(img); tupian.Value = im; } row.Cells.Add(tupian); 本來覺得用 this.studentPic.Image.Dispose(); this.studentPic.Image = null; 就可以了,但是根本就沒法實(shí)現(xiàn),SUOYIYA DUOSHIJIAN!!!!!!!!!!! |
|