将TIFF保存为PNG

时间:2012-01-26 17:39:34

标签: c# tiff image-conversion

我有这样的代码

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并将其存储为byte的数组。在我测试它的两台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上,即使使用这些特定的内容也非常好。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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