如何在C#中创建2.56亿像素的图像?

如何在C#中创建2.56亿像素的图像?,c#,image,bitmap,C#,Image,Bitmap,我正在做一个成像应用程序。我需要一张16000 x 16000像素的图像。这不是不可能的,因为我可以在PhotoShop中创建此图像以供打印。(56 x 56英寸,300dpi) 我正在使用以下代码: Image WorkImage = new Bitmap(16000, 16000); 这会生成一个“无效参数”异常,但当我使用9000 x 9000像素时不会产生异常 MSDN没有说明构造函数中的限制 我知道位图对象中的数据在内存中,因为如果数组太大,它可能引发“内存不足”异常,但事实并非如

我正在做一个成像应用程序。我需要一张16000 x 16000像素的图像。这不是不可能的,因为我可以在PhotoShop中创建此图像以供打印。(56 x 56英寸,300dpi)

我正在使用以下代码:

Image WorkImage = new Bitmap(16000, 16000); 
这会生成一个
“无效参数”
异常,但当我使用9000 x 9000像素时不会产生异常

MSDN没有说明构造函数中的限制

我知道位图对象中的数据在内存中,因为如果数组太大,它可能引发
“内存不足”异常,但事实并非如此。我更喜欢在文件中管理这些数据,但我不知道如何管理


谢谢。

为什么不生成一堆较小的位图呢?例如,16个4k x 4k像素的位图


哦,虽然可能不是您遇到异常的原因,但是对于大型对象/CLR大型对象堆,有一些有趣的怪癖。这是在一些其他的主题,你可能想阅读只是为了好玩,因为你正在玩大内存块。。。例如:

Photoshop不会像您试图做的那样在内存的连续部分分配巨大的图像。在创建非常大的图像时,我遇到了一些内存限制

考虑对图像进行细分。这有更好的内存管理的好处。如果编辑一个细分图像,则不必更新整个图像



另一方面,每像素4字节的16000 x 16000大约是1 GB!那太大了。祝你好运

虽然我同意Charlie的观点,即使用几个较小的位图可能会更好,但我只是在我的32位Windows上用2 GB RAM运行了下面的代码,花了一段时间才完成,但没有收到任何错误

var b = new Bitmap(16000, 16000);
Console.WriteLine("size is {0}x{1}", b.Width, b.Height);

真的,不介意位图数据在哪里。我只需要在输出文件(TIFF)与16000 x 16000像素的图像。我认为我可以创建一个类(如何创建位图类和图像类),但是使用文件本身中的数据,在那里我可以编辑图像

我正在考虑检查TIFF结构,并创建一个类来创建和编辑那些部分缓冲在内存中的文件。我不想创建一个大于几MB的对象

但我想知道是否有一些类具有BMP或TIFF文件编辑功能。。。真的,我不知道


感谢您之前的回答。:)

15000x15000像素会发生什么情况?14000x14000?10000x1000?谢谢布莱恩!我在CLR中没有看到任何直接的技术原因,为什么它会失败,现在我知道了。:)是的,当我发布我的回复时,我没有看到你的回复。我想我们大概在同一时间点击了“添加答案…”