2012-01-26 88 views
1

我有这样的代码保存为TIFF,PNG

using (Image image = System.Drawing.Image.FromStream(sourceStream)) 
{ 
    Guid objGuid = image.FrameDimensionsList[0]; 
    FrameDimension objDimension = new FrameDimension(objGuid); 
    int pageCount = image.GetFrameCount(objDimension); 

    for (int i = 0; i < pageCount; i++) 
    { 
      image.SelectActiveFrame(objDimension, i); 
      resultStream = new MemoryStream(); 
      image.Save(resultStream, ToSystemImageFormat(outputFormat)); 
      result.Add(resultStream.ToArray()); 
    } 
} 

目的 - 每个TIFF的页面保存为PNG文件并存储为字节的数组。在我测试的两台WIN7电脑上,这个问题很好。但是我有一台WinXP电脑,并且这段代码因“参数无效”异常而失败。 TIFF文件总是一样的。有人知道问题在哪里?

我试图用ImageConverter:

ImageConverter imageConverter = new System.Drawing.ImageConverter(); 
using (Image image = (Image)imageConverter.ConvertFrom(sourceContent)) 
{ 
    Guid objGuid = image.FrameDimensionsList[0]; 
    FrameDimension objDimension = new FrameDimension(objGuid); 
    int pageCount = image.GetFrameCount(objDimension); 

    for (int i = 0; i < pageCount; i++) 
    { 
      image.SelectActiveFrame(objDimension, i); 
      resultStream = new MemoryStream(); 
      image.Save(resultStream, ToSystemImageFormat(outputFormat)); 
      result.Add(resultStream.ToArray()); 
     } 
} 

,但它同样也异常失败。 谢谢

UPD#1:Image.FromStream()方法失败。我忘了提及大多数TIFF文档都没有任何问题地转换,它在特定的文档上失败。但在WIN7上,即使使用这些特定的东西也没问题。

+1

哪行代码导致异常? – cadrell0

+0

请发布整个异常消息和堆栈跟踪。 – jrummell

+0

因为WinXP它不是开发人员的计算机,所以无法发布完整的堆栈跟踪 – nKognito

回答

1

我知道winxp对png的支持有限。在winxp上运行的.net 4.0中无法加载实际上是压缩的pngs(win 7上的标准)的图标文件,您会得到相同的异常。

+0

它在特定的TIFF文档上失败的问题,它们中的大多数都没有任何问题地转换 – nKognito

+0

哦,我明白了,你的措辞让我失望。尝试在此特定TIFF上运行代码时,您总会遇到参数异常?你可以发布堆栈跟踪吗?听起来像那个特定的TIFF或者是损坏的,结构上使图像库不理解,或者使用图像库没有实现的TIFF功能。据我了解,TIFF是一个非常复杂的标准。 – antiduh

+0

在WinXP上失败的TIFF的主要问题 - 在Win7上工作 – nKognito

1

我推荐尝试LibTiff.Net。或者,你可以使用libtiff(C++代码),但我怀疑LibTiff.Net将更容易从你的.Net代码调用。