【问题标题】:Separation of multipage tiff with compression "CCITT T.6" very slow使用压缩“CCITT T.6”分离多页 tiff 非常慢
【发布时间】:2010-05-08 21:01:06
【问题描述】:

我需要分离多帧tiff文件,使用如下方法:

public static Image[] GetFrames(Image sourceImage)
{
    Guid objGuid = sourceImage.FrameDimensionsList[0];
    FrameDimension objDimension = new FrameDimension(objGuid);
    int frameCount = sourceImage.GetFrameCount(objDimension);
    Image[] images = new Image[frameCount];
    for (int i = 0; i < frameCount; i++)
    {
        MemoryStream ms = new MemoryStream();
        sourceImage.SelectActiveFrame(objDimension, i);
        sourceImage.Save(ms, ImageFormat.Tiff);
        images[i] = Image.FromStream(ms);
    }
    return images;
}

它工作正常,但如果源图像使用 CCITT T.6 压缩进行编码,则在我的 2.5ghz CPU 上分离一个 20 帧文件最多需要 15 秒。(一个在此过程中核心处于 100%)

之后使用标准压缩 (LZW) 将图像保存到单个文件时,LZW 文件的分离时间不到 1 秒

使用 CCITT 压缩进行保存也需要很长时间。

有没有办法加快这个过程?

编辑:

我已经测量了执行时间:

        sourceImage.SelectActiveFrame(objDimension, i);
        sourceImage.Save(ms, ImageFormat.Tiff);

这两个调用各占总处理时间的 50% 左右。 使用一个初始容量足以容纳所有图像的 MemoryStream 不会导致可测量的速度增益。 Image.FromStream 方法几乎不需要任何处理时间。

我需要单帧,因为我需要处理它们(纠偏、旋转等)。

如果有与我完全不同的方法,我会很高兴听到它。

【问题讨论】:

  • 您使用的是 64 位操作系统吗?执行时硬盘灯在做什么?
  • 我使用的是 Windows 7 x64。硬盘几乎没有被使用(也尝试了来自 MemoryStream 的图像,也很慢)。在此过程中,一个 CPU 内核处于 100% 状态。将程序切换到 x86 会使该功能花费更长的时间。

标签: c# image tiff


【解决方案1】:

在你的情况下要做的第一件事就是测量。

在我们弄清楚如何让它更快之前,当然在我们通过优化让它变得更加复杂之前,我们需要知道什么是慢速部分。幸运的是,您的代码很短,因此很容易只需输入您自己的计时代码,然后我们就可以进行更明智的查看。

这里说的是一些不知情的建议:

  1. 我假设这些图像相当大并且都具有相同的尺寸,因此与其为每个图像创建一个新的内存流并动态增长它,为什么不构造一个足够大的 MemoryStream然后将其用于所有这些,这将减少该方法创建的垃圾量并减少总体分配的数量。
  2. 您说您将一个核心固定在 100%,因此我们可能应该尝试使用多个核心。您可以尝试将工作拆分为多个线程。也许让一个线程将帧保存到 MemoryStreams 中,另一个可以将它们加载到新图像中,它们可以通过工作队列进行通信。
  3. 你说你要拆分它,然后你说你又要保存它,也许你可以直接保存而不是通过中间的另一个图像对象。

【讨论】:

  • 我在最初的帖子中添加了措施和更多细节。
【解决方案2】:

这似乎是 Windows 7 上的 GDI+ 的问题。

我在运行 Windows XP 的慢得多的机器上运行了一个示例程序,并且在压缩图像上的性能比在 Windows 7 上的性能要好得多(大约快 2-3 倍)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多