我需要使用PixelFormat.Format24bppRgb编码创建一个巨大的图像(aprox 24000 x 22000)。我知道打开它几乎是不可能的......
我想做的是:
Bitmap final = new Bitmap(width, height, PixelFormat.Format24bppRgb);
正如预期的那样,抛出异常,因为我无法以这种方式处理内存中的11GB文件。
但我有一个想法:我可以在生成文件时编写文件吗?因此,我不会在RAM上工作,而是在处理HD。
为了更好地解释:我有大约13K的瓷砖,我打算在这个愚蠢的文件中将它拼接在一起。因为我可以在给定顺序中迭代它们,所以我可以使用不安全的代码将其直接写入内存。
有什么建议吗?
答案 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异常。