嘗試將巨大圖像(例如9000x9000像素圖像)加載到位圖對象中可能會產生內存不足錯誤,並且無疑會造成其他相關問題。如何在沒有內存問題的情況下加載/處理大圖像?
如何從磁盤加載9000x9000像素圖像,最終在保存到磁盤之前調整大小,而不會導致致命錯誤(例如內存不足)?
讓我們假設一個帶有2gb內存的C#4.0的32位環境,並且將使用jpg,gif,bmp,tif,png等圖像格式。
我已經嘗試了以下3個片段,並且每個都會出現內存錯誤。
嘗試1:
using (Bitmap srcImg = new Bitmap(@"C:\9000x9000.jpg"))
{
// boom
}
嘗試2:
using (Image srcImg = Image.FromFile(@"C:\9000x9000.jpg"))
{
// kapow
}
嘗試3:
using (FileStream fs = new FileStream(@"C:\9000x9000.jpg", FileMode.Open, FileAccess.Read))
{
using (Image srcImg = Image.FromStream(fs))
{
// kelly clarkson
}
}
我給一個可能的解決方案的想法是直接加載的圖像文件到一個數組(所以你沒有Bitmap對象的巨大開銷),以某種方式調整它使用該數組更小(可能需要編碼爲D不同的圖像格式標題?),然後才能最終轉換爲可管理大小的位圖對象。
想法或可能的解決方案?
什麼是錯誤信息?首先在簡單的控制檯應用程序中嘗試它,然後在您的應用程序中應用該解決方案 –
什麼是圖像的位深度?我很好奇圖像試圖消耗多少內存。我的猜測是一個很大的32位圖像意味着至少310MB。考慮到你的其他問題,我強烈建議你升級到至少有8GB內存的64位系統..可能更多。並且我會建議您獲取用於處理如此大圖像的內置工具 – NotMe
您是否確實發生錯誤,或者您是否只是猜測可能出現的問題?我認爲沒有先驗理由認爲18 Mpx的圖像會導致任何悲傷,除非你真的想把它做得更大。它將佔用幾百MB。 –