我正在處理一個應用程序,它必須處理大型bmp文件,這些文件通常太大而不適合內存。作爲我們在創建項目時開發的軟件的一部分,我的應用程序將數據從bmp文件轉換爲不同的格式,以便在部分中輕鬆檢索。直接從文件中讀取大量bmp數據
目前,由於文件通常太大而無法放入內存,因此軟件直接從文件中讀取一部分字節數據,對其進行處理,然後移至下一部分。用於讀取文件的代碼類似於如下所示(簡化爲清楚起見):
FileStream fs = File.OpenRead(fileName);
fs.Seek(sectionStart, SeekOrigin.Begin);
currentSectionAsBytes = new byte[sectionSize];
fs.Read(currentSectionAsBytes, 0, currentSectionAsBytes.Length);
這一直很好,直到如今,因爲我們所有的工作文件的寬度被4整除,因此BMP文件沒有填充。最近,我們一直在處理不同大小的圖像,這些圖像在每行數據的末尾都有填充,導致採集的數據出錯。
我的問題是,有誰知道任何更好的方式直接從文件獲取bmp數據。如前所述,由於文件較大,我無法從文件中讀取位圖。目前我最好的想法是,在獲取currentSectionAsBytes之後,計算填充大小並手動刪除它。這看起來太麻煩和複雜了。必須有更好的解決方案。
我很好奇你的項目處理位圖的目的是爲了加載到內存中。你正在處理來自「斯隆數字巡天」的圖像嗎?或者你的電腦過時了,你可以添加一些內存;)我最好的猜測是你應該編程一個例程,在讀取數據的同時過濾填充。 –
@Mike de Klerk。沒有像我擔心的那樣激動人心:p圖像數據是從許多來源獲得的,其中文件大小超出了我們的控制範圍。同樣,該軟件被不同機器上的許多學者/學生使用,所以我們必須確保他們都可以運行它。我認爲你的想法可能是要走的路。我只是希望有一個更優雅的解決方案。我想我是一廂情願。 – OnABauer