如何裁剪巨幅图像

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

我目前的工作项目包括一个图像查看器/分析程序,能够加载超过16 GB的图像。 您必须使用手动文件IO,拉出标题信息并按需创建子图像(或者如果您正在处理图像,则可以创建单个图块并就地处理它)。 很少有图书馆能够为你提供加载/修改20k×20k图像(1.2gb,24bpp)的能力,并且那些很少使用类似性能的东西(如果这是一个问题)。

不知道这是否会有所帮助,但这里有一篇关于使用C#lambda表达式进行图像处理的文章。

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

您可能不得不破解图像文件流,寻找存在颜色和像素数据的位置,并将像素数据的一部分读入数组,并从中创建图像。

例如,对于BMP文件格式 ,你需要寻找颜色表,加载颜色表,然后寻找像素数组部分,加载你想要的多个像素到一个数组,然后用一个新的位图那些像素。

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

查看.NET,这是页面下方的一部分。

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

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

http://sofzh.miximages.com/c%23/); }

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