【问题标题】:How to crop huge image如何裁剪大图像
【发布时间】:2010-11-04 08:10:53
【问题描述】:

我需要在 C# 中处理大图像(20,000x20,000 像素)。由于内存限制,直接打开这些图像不是可行的方法,但我想要做的是将图像分割成更小的部分(裁剪)。我一直在寻找可以解决问题的第 3 方库,但到目前为止还没有结果。我尝试了 FreeImage 和 ImageMagick,但它们无法打开 20,000x20x000 像素的图像。我怎样才能做到这一点?

【问题讨论】:

  • 图片是什么格式的?在位图等格式中,您可以直接使用文件 io。如果您想使用 GDI 或其他什么,您可以将各个块转换为流,然后将其加载到图像中)。像 PNG 这样的格式需要您更深入地研究,检查 PNG 文件如何被分割成块并直接使用它们。

标签: c# image crop


【解决方案1】:

您可以使用内置的 .Net 库。

使用

sourceBitmap = (Bitmap)Image.FromStream(sourceFileStream, false, false);

这将阻止图像数据缓存在内存中。您可以创建一个新的目标位图来绘制该海量图像的一个子部分:

var output = new Bitmap(outputWidth, outputHeight);
var outputGraphics = Graphics.FromImage(output);

outputGraphics.DrawImage(sourceBitmap, destRect, srcRect, GraphicsUnit.Pixel);

using (var fs = File.OpenWrite(outputFilePath))
{
    output.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
}

其中 destRect 可以是 outputImage 的整个大小,也可以是更小的区域。

【讨论】:

    【解决方案2】:

    我会用 ImageMagick 来做。有一个非常可靠的 .NET API 可用,它通常是进行此类图像处理的最佳方式。

    在 .NET 下查看,在页面下方。

    http://www.imagemagick.org/script/api.php

    以下是有关 ImageMagick 中裁剪内容如何工作的信息,适用于命令行版本。

    http://www.imagemagick.org/Usage/crop/#crop

    【讨论】:

      【解决方案3】:

      我不知道有任何现有的图书馆可以做到这一点。

      您可能必须打开图像文件流,寻找颜色和像素数据存在的位置,然后将像素数据的一部分读入一个数组,然后从中创建您的图像。

      例如,对于BMP file format,您需要查找颜色表,加载颜色表,然后查找像素数组部分,将任意数量的像素加载到数组中,然后新建一个只有这些像素的位图。

      【讨论】:

        【解决方案4】:

        我目前的工作项目包括一个能够加载超过 16 GB 的图像的图像查看器/分析程序。您必须使用手动文件 IO,提取标题信息并按需创建子图像(或者如果您正在处理图像,则可以创建单个图块并就地处理它)。很少有库能够让您加载/修改 20k x 20k 的图像(1.2gb at 24bpp),而那些这样做的库很少会以类似性能的方式这样做(如果这是一个问题的话)。

        【讨论】:

        • 16gb+ 图片?太棒了,它们是从哪里来的?
        • 我们使用合成孔径雷达图像,可以生成非常大的图像:P
        • 哈哈,那是坏蛋(谷歌有一些很棒的图片),你使用什么语言。我很好奇 C# 是否可以处理这种工作量
        • 我们使用 C# 来显示所有内容,并使用 OpenGL P/Invoke 到 C++ 来完成繁重的工作。效果出奇的好:P
        【解决方案5】:

        不知道这是否有帮助,但这里有一篇关于 image processing with C# lambda expressions 的文章。

        【讨论】:

          猜你喜欢
          • 2012-05-19
          • 2012-11-16
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 2020-09-15
          • 2017-05-22
          • 2014-05-07
          • 1970-01-01
          相关资源
          最近更新 更多