【问题标题】:Saving TIFF as PNG将 TIFF 保存为 PNG
【发布时间】:2012-01-26 17:39:34
【问题描述】:

我有这样的代码

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 上,即使有这些特定的也很好。

【问题讨论】:

  • 哪行代码导致异常?
  • 请发布整个异常消息和堆栈跟踪。
  • 无法发布完整的堆栈跟踪,因为 WinXP 它不是开发人员计算机
  • 能否修改应用程序以记录完整的异常消息和 StackTrace?另外,此时 sourceStream 中有什么?

标签: c# tiff image-conversion


【解决方案1】:

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

【讨论】:

  • 特定TIFF文件失败的问题,大部分都转换没有问题
  • 哦,我明白了,你的措辞让我失望了。尝试在此特定 TIFF 上运行代码时,您总是遇到参数异常?你能发布堆栈跟踪吗?听起来那个特定的 TIFF 要​​么已损坏,要么以图像库无法理解的方式构建,要么使用了图像库未实现的 TIFF 的某些功能。据我了解,TIFF 是一个相当复杂的标准。
  • TIFF 在 WinXP 上失败的主要问题 - 在 Win7 上有效
  • 我明白这一点,我的回答仍然与该行为一致。 .Net Ultimate 使用操作系统的功能来处理图像。 Win 7 可能有更完整的 TIFF 实现。此特定图像使用了 TIFF 的某些功能,Win XP 上的实现不支持,但 Win 7 支持。
  • 我也明白。问题是如何解决它
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多