在 C# 中生成巨大的图像

本文关键字:巨大 图像 | 更新日期: 2023-09-27 18:34:39

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

我想做的是这样的:

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

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

但我有一个想法:我可以在生成文件时写入文件吗?因此,与其在RAM上工作,不如在HD上工作。

只是为了更好地解释:我有大约 13K 个瓷砖,我计划将它们拼接在这个愚蠢的庞大文件中。由于我可以按给定顺序迭代它们,因此我可以使用不安全的代码将其直接写到内存中。

有什么建议吗?

在 C# 中生成巨大的图像

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

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

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

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