在C#中生成巨大的图像

时间:2012-05-17 13:24:34

标签: c# image-processing

我需要使用PixelFormat.Format24bppRgb编码创建一个巨大的图像(aprox 24000 x 22000)。我知道打开它几乎是不可能的......

我想做的是:

Bitmap final = new Bitmap(width, height, PixelFormat.Format24bppRgb);

正如预期的那样,抛出异常,因为我无法以这种方式处理内存中的11GB文件。

但我有一个想法:我可以在生成文件时编写文件吗?因此,我不会在RAM上工作,而是在处理HD。

为了更好地解释:我有大约13K的瓷砖,我打算在这个愚蠢的文件中将它拼接在一起。因为我可以在给定顺序中迭代它们,所以我可以使用不安全的代码将其直接写入内存。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

ImageMagick的Large Image Support(tera-pixel)可以帮助您将图像组合在一起。您可以使用命令行并使用this包装器向其发出命令,也可以将此ImageMagick.NET用作API。

答案 1 :(得分:2)

您可以使用非压缩格式(如BMP)编写它。 BMP在行中保存原始颜色字节。因此,您将加载第一行图块,读取其单独的像素行,并将其作为输出图像中的复合单行写入。这样,您只能打开几个图块并立即记下输出图像。

但我不知道如何将其写成压缩图像,如JPG或PNG。但我确信存在一些专门的软件。

答案 2 :(得分:0)

根据您在完成时对此图像的意图,我建议将其分为4并以此方式使用它。我使用了10,000 x 10,000像素而没有抛出OOM异常。