2011-05-02 116 views
1

我一直在試圖使用TiffUtil類的mergeTiffStreams方法在貼:合併多個TIFF文件

http://kseesharp.blogspot.com/2007/12/class-for-tiff-manipulation.html

然而,像其他人紛紛發表意見,該線程,結束結果是我收到只包含我的第一個TIFF文件的Stream。我在MemoryStream陣列中傳遞的其他TIFF不包括在內。

有沒有其他人遇到過這個問題?如果是這樣,任何建議將不勝感激。

謝謝。

[UPDATE]

這是我現在的代碼。它只返回流包含在傳入數組的第一個TIFF。

public MemoryStream mergeTiffStreams(MemoryStream[] tiffStreams) 
    { 
     if (tiffStreams == null) 
      throw new ArgumentNullException("tiffStreams"); 

     Encoder enc = Encoder.SaveFlag; 

     ImageCodecInfo info = null; 
     foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) 
      if (ice.MimeType == "image/tiff") 
       info = ice; 

     EncoderParameters ep = new EncoderParameters(1); 
     ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame); 
     MemoryStream tiffStream = new MemoryStream(); 
     Bitmap masterBitmap = new Bitmap(tiffStreams[0]); 
     masterBitmap.Save(tiffStream, info, ep); 

     ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage); 
     for (int x = 1; x < tiffStreams.Length; x++) 
     { 
      masterBitmap.SaveAdd(Image.FromStream(tiffStreams[x]), ep); 
     } 

     ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush); 
     masterBitmap.SaveAdd(ep); 

     return tiffStream; 
    } 
+0

該代碼沒有格式化,因此閱讀起來很痛苦。我最近寫了一些這樣做。您必須從原始tiff中提取每個頁面並將它們寫入新的tiff。如果可以,我建議使用WPF API。 System.Drawing API基本上是GDI +之上的外觀層。 – Amy 2011-05-02 19:06:23

+0

您是否曾經能夠找到解決此問題的解決方案? – hspain 2012-07-31 22:06:45

+0

更新:http://kseesharp.blogspot.com/2007/12/class-for-tiff-manipulation.html在此時不再存在 – Dexters 2013-02-06 18:31:58

回答

1

你的問題可能是你如何處理流返回。如果,例如,你想將其保存到IO使用:

File.WriteAllBytes(myPath, tiffStream.ToArray()); 

,而不是建立在流的新位圖對象。無論如何,這是我的問題。

+0

這將創建多頁TIFF文件或單頁TIFF文件? – 2016-06-29 07:49:13

+0

@ShahrozShaikh - 我忘了。當時和現在之間的很多代碼:) – 2016-06-29 13:47:12