2011-09-29 63 views
0

我確實有一個包含超過500個Bitmaps對象的位圖數組。我需要將數組中的每個單獨的Bitmap對象轉換爲二進制數組。我正在使用MemoryStream類來實現此目的:將位圖轉換爲二進制數組性能

using (MemoryStream ms = new MemoryStream()) 
{ 
    images[0].Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
    byte[] byteData = ms.ToArray(); 
} 

我想知道是否有其他方法來實現此目的。我不確定這個過程有多昂貴。

感謝

+1

那麼,如果你不知道需要多長時間,我們應該如何.. – Blindy

+0

謝謝Blindy,我只是尋找達到此目的的最佳方式,我不知道使用MemoryStreams有多昂貴 –

+0

這似乎是一個完全有效的方法給我。根據您選擇的格式(gif,png等),您將得到不同大小的數組(取決於給定格式具有多少壓縮)。 –

回答

1

我已經做了一些速度測試,並轉換爲ImageFormat.Bmp是最快的。它不需要進行任何壓縮。儘管最好的格式也取決於你打算在這之後對數據做什麼。

這也是值得考慮位圖來自哪裏的第一位。如果你從一個文件中加載它們,它可能是值得的,先切換東西並讀取文件數據,然後在其中創建你的Bitmap對象。

1

通過選擇Gif,您正在使CPU /內存摺衷,你很可能不想要。具體來說,Gif將會變小,但與使用BMP相比,需要一些時間來壓縮(除非圖像已經是格式)。

如果你正在複製這些內容以至於你有內存帶寬問題(並且無法解決這個問題),這是一個好主意,但除此之外你應該堅持使用BMP。實際上,對於500張圖片,我預計最多需要1-2秒,因此您可能不需要擔心這種微型優化。如果花費很長時間,您可以轉向非託管代碼,這可能會更好地執行,因爲您將更好地控制內存分配和副本。

+0

謝謝,它很有用。我使用的過程是假設從PDF文件中提取圖像,但我不想將這些圖像保存到磁盤,而是將它保存到MemoryStream中,然後向上顯示圖像在用戶界面中。 –