7

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

我想要做的是:

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

正如预期的那样,由于我无法以这种方式轻松处理内存中的 11GB 文件,因此引发了异常。

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

只是为了更好地解释一下:我有大约 13K 个图块,我计划将它们拼接到这个愚蠢的巨大文件中。因为我可以按给定的顺序迭代它们,所以我可以使用不安全的代码将它直接写到内存中。

有什么建议么?

4

3 回答 3

3

ImageMagick 的大图像支持(万亿像素)可以帮助您在拥有组成图像的图块后将图像放在一起。您可以使用命令行并使用包装器向其发出命令,也可以将此ImageMagick.NET用作 API。

于 2012-05-17T14:29:44.217 回答
2

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

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

于 2012-05-17T13:43:03.490 回答
0

根据您在完成后打算如何处理此图像,我建议将其分成 4 份并以这种方式处理。我使用了 10,000 x 10,000 像素而没有抛出 OOM 异常。

于 2012-05-17T13:46:18.557 回答