我正在研究一些大學項目,並且遇到了內存問題。 我打開一個位圖大約需要1,5GB硬盤上用下面的代碼:處理大的位圖(高達3GB)
Bitmap bmp = new Bitmap(pathToFile);
的問題是,新創建位圖對象使用有關的RAM 3,5GB這是我無法理解(這是真的是大包裝:E)。我需要進入像素數組,並且使用Bitmap類真的很有幫助(稍後我使用LockBits()方法,並且每字節處理數組字節),但在這種情況下,它是完全阻塞的。所以這裏是我的問題:
是否有任何簡單的方法來提取像素數組而不借出額外的2GB?我正在使用c#來提取所需的數組,這是後來在c + +處理 - 也許我可以提取所有需要的數據在c + +(但轉換問題出現在這裏 - 我專注於24bgr格式)? PS:我需要將整個位圖保存在內存中,因此將其分割爲多個部分是無法解決的。
PS2:只是澄清一些問題:我知道文件擴展名和文件格式之間的區別。加載的文件是未壓縮的位圖,每個像素大小爲3個字節〜1.42GB(16k x 32k像素),那麼爲什麼Bitmap對象的大小超過兩倍?任何解壓縮問題和轉換爲其他格式都不會發生。
可能重複:[http://stackoverflow.com/questions/569889/how-do- i-use-large-bitmaps-in-net?rq = 1](http://stackoverflow.com/questions/569889/how-do-i-use-large-bitmaps-in-net?rq=1) – Jason
@Jason:是的,但這個問題沒有真正的答案。不知道他們爲什麼監督內存映射文件。 –
位圖使用什麼編碼?是否有RLE壓縮? –