2014-09-26 96 views
0

我試圖在ImageList集合上添加圖像,但我得到這個惱人的「內存不足」異常。我已經閱讀了其他一些關於它的問題,但我不認爲我的圖像已損壞。圖像是單色BMP(用於標籤打印機)並且小於1kb。內存不足時Directory.GetFiles

For Each path As String In Directory.GetFiles("C:\Users\Public\Nitek\Imagens Tratadas") 
    ImageList1.Images.Add(Image.FromFile(path)) 
Next 

該目錄上只有兩張圖片。我能做些什麼?

編輯:http://i.stack.imgur.com/39RNz.png - 這是這些圖片之一。

謝謝:)

+1

你的代碼很好。您的某張圖片可能存在問題。嘗試爲每個圖像(在For Each Loop內)放置一個Try ... Catch塊 – Eminem 2014-09-26 18:18:30

+0

如果目錄中有其他文件(例如,通常會隱藏的Thumbs.db文件),那麼您的程序將會嘗試將它們加載到ImageList中。你不想這樣做。如果您在每個文件上使用[Path.GetExtension](http://msdn.microsoft.com/en-us/library/system.io.path.getextension%28v=vs.110%29.aspx)並檢查它是你想要的類型,你應該能夠避免錯誤。 – 2014-09-26 21:22:52

+0

Andrew Morton,確實是一個'Thumbs.db'文件。我將使用Path.GetExtension來檢查文件。謝謝 – 2014-09-29 20:36:24

回答

0

來源:http://msdn.microsoft.com/en-us/library/stf701f5.aspx

管理GDI +具有支持以下文件類型的內置編碼器和解碼器:

BMP 

GIF 

JPEG 

PNG 

TIFF 

文件保持鎖定狀態,直到圖像設置。

如果文件沒有有效的圖像格式,或者如果GDI +不支持該文件的像素格式,則此方法將引發OutOfMemoryException異常。

你可以嘗試以不同的格式保存文件,看它是否工作(如jpeg)。

0

感謝Andrew Morton的貢獻,我可以解決這個問題。我不得不創建一個條件在我的ImageList上添加圖像。

For Each caminho As String In Directory.GetFiles("C:\Users\Public\Nitek\Imagens") 
    If Path.GetExtension(caminho) = ".bmp" Then 
     ImageList1.Images.Add(Image.FromFile(caminho)) 
    End If 
Next 

使用Path.GetExtension屬性可以覆蓋Thumbs.db文件。

謝謝:)

+0

不客氣:)你可以做得更好:因爲你只需要擴展名爲'.bmp'的文件,你可以使用'Directory.GetFiles(「C:\ Users \ Public \ Nitek \ Imagens」, 「* .BMP」)'。 – 2014-09-30 17:20:52