2009-12-03 49 views
1

我正在使用byte []將多個圖像存儲在數據庫中。每個字節[]都是多頁TIFF,但我需要檢索圖像,將它們全部轉換爲一個多頁TIFF。該系統以前使用System.Drawing.Image類,使用Save和SaveAdd - 這很好,因爲它逐步保存文件,因此內存使用量很小,但遇到了GDI +併發問題 - 這是在後端運行在COM +中。將多個字節[]轉換爲多頁TIFF等效圖像。無需GDI +

將方法轉換爲使用System.Windows.Media.Imaging類TiffBitmapDecoder和TiffBitmapEncoder,並在兩者之間進行一些按摩。這解決了併發問題,但我正在努力尋找一種逐步保存圖像(即逐幀)來限制內存使用的方法,因此可以操縱的圖像大小要低得多(即我創建了一個測試1.2 GB圖像使用GDI +類,可能已經繼續,但只能使用其他方法創建〜600MB文件)。

有沒有辦法逐步保存多頁TIFF圖像以避免內存問題?如果在TiffBitmapEncoder上多次調用Save,則會引發錯誤。

回答

1

我想我會使用標準的.NET方式來解碼tiff圖像並編寫我自己的可以逐步寫入磁盤的tiff編碼器。 tiff格式規格是公開的。

解碼tiff並不那麼容易,這就是爲什麼我會使用TiffBitmapDecoder來實現這一點。編碼更容易,因此我認爲編寫一個編碼器是可行的,您可以使用單獨的幀進行編碼,並逐步將必要的數據寫入磁盤。一旦準備好更新IFD(圖像文件目錄)條目,您可能必須更新生成的TIFF的標題。

祝你好運!

+0

我同意科恩。然而,如果你正在尋找一個高性能的多用途商業庫,我已經使用LeadTools,包括.Net和C++版本,並取得了很高的成功率。 .Net庫很容易理解。 C++庫不是那麼容易。 –

1

我已經通過LibTIFF.NET完成了這項工作,我可以用這種方式處理多GB圖像,而且不痛。見我的問題在

Using LibTIFF from c# to access tiled tiff images

雖然我用它平鋪訪問時,內存問題是相似的。 LibTIFF允許完全訪問所有TIFF功能,因此文件可以以類似目錄的方式讀取和存儲。

另一件值得注意的是不同windows版本之間的GDI差異。見GDI .NET exceptions

相關問題