2011-09-01 48 views
2

我收到使用CCITTFaxDecode壓縮的圖像。所以我使用Bit Miracle的LibTiff.Net來將圖像轉換爲任何格式。如何使用位奇蹟LibTiff.Net將圖像寫入到一個MemoryStream

我需要將解壓縮的圖像寫入MemoryStream。我使用的代碼例如由另一個線程,我能夠使用此代碼

using BitMiracle.LibTiff.Classic; 
... 

MemoryStream ms = new MemoryStream(); 
TiffStream stm = new TiffStream(); 

Tiff tiff = Tiff.ClientOpen("","w",ms,stm); 
tiff.SetField(TiffTag.IMAGEWIDTH, UInt32.Parse(pd.Get(PdfName.WIDTH).ToString())); 
tiff.SetField(TiffTag.IMAGELENGTH, UInt32.Parse(pd.Get(PdfName.HEIGHT).ToString())); 
tiff.SetField(TiffTag.COMPRESSION, Compression.CCITTFAX4); 
tiff.SetField(TiffTag.BITSPERSAMPLE, UInt32.Parse(pd.Get(PdfName.BITSPERCOMPONENT).ToString()));  
tiff.SetField(TiffTag.SAMPLESPERPIXEL, 1);  
tiff.WriteRawStrip(0, raw, raw.Length); 
MemoryStream newStream = (MemoryStream)tiff.Clientdata(); 

tiff.Close(); 

時遇到的問題是,MemoryStream字節數組是不是有效的圖像。

我用System.Drawing.Image類加載這newStream內存流,但在字節數組中有一些空值。

如果我使用Open構造寫入到磁盤它工作正常圖像。

我想知道,如果有人知道爲什麼MemoryStream未能保存解壓縮圖像。

由於

回答

1

的問題是:

Tiff對象關閉,並且調用Close方法後處置流。

因此,如果您以後需要使用的數據,你可能要改變

MemoryStream newStream = (MemoryStream)tiff.Clientdata(); 

MemoryStream newStream = new MemoryStream(ms.ToArray()); 

另一種方法是不調用Tiff.Close,直到你與內存流來完成。但是這種方法有一些缺點。

相關問題