如何在 C# 中创建 256 兆像素的图像?

发布于 2024-08-01 14:54:53 字数 401 浏览 3 评论 0原文

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

我正在使用此代码:

Image WorkImage = new Bitmap(16000, 16000); 

这会生成一个“无效参数”异常,但当我使用 9000 x 9000 像素时则不会。

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

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

谢谢。

I am making an imaging application. I need a 16000 x 16000 pixel image. This is not impossible because in PhotoShop I can create this image for print. (56 x 56 inches, in 300dpi)

I am using this code:

Image WorkImage = new Bitmap(16000, 16000); 

This generates an "Invalid Parameter" exception, but not when I do 9000 x 9000 Pixels.

MSDN doesn't say anything about the limits in the constructor.

I know that the data in the bitmap object is in memory, because if the array is too big it can throw an "Out Of Memory" exception, but this is not the case. I would prefer manage this data in a file, but I don't know how.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

丢了幸福的猪 2024-08-08 14:54:53

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

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

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

感谢您之前的回答。 :)

Really, dont mind where is the Bitmap Data. I only need in the output a file (TIFF) with the 16000 x 16000 pixels image. I think that i can create a class (How the bitmap class and the image class) but with the data in the file itself, where i can edit the image.

I am thinking to check the TIFF structure and create a class for create and edit those files partially buffered in memory. I dont want create a object that are more big than a few MB.

But i want to know if there is some class with BMP or TIFF File editing capability... really i dont know.

Thanks for your previous Answers. :)

分開簡單 2024-08-08 14:54:53

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

哦,虽然可能不是导致异常的原因,但大对象/CLR 大对象堆有一些有趣的怪癖。 这在其他一些 SO 主题中有所介绍,您可能只是为了好玩而想阅读这些主题,因为您正在使用大块内存......例如: 如何从多个托管应用程序的大对象堆 LOH 中获取未使用的内存?

Why not generate a bunch of smaller bitmaps? E.g. 16 bitmaps that are 4k x 4k pixels...?

Oh, and although probably not the cause of the exception you got, there are some funny quirks with large objects / the CLR large object heap. This is covered in some other SO topics that you may want to read just for fun since you're playing with large chunks of memory... E.g.: How to get unused memory back from the large object heap LOH from multiple managed apps?

唔猫 2024-08-08 14:54:53

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

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

While I agree with Charlie that you're probably better off with several smaller bitmaps, I just ran the code below on my 32 bit Windows with 2 GB RAM, and it took a while to complete, but I received no errors.

var b = new Bitmap(16000, 16000);
Console.WriteLine("size is {0}x{1}", b.Width, b.Height);
谎言 2024-08-08 14:54:53

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

考虑细分您的图像。 这样做的好处是可以更好地进行内存管理。 如果您编辑其中一张细分图像,则无需更新整个图像。


顺便说一句,16000 x 16000 每像素 4 字节大约是 1 GB! 这是巨大。 祝你好运!

Photoshop does not allocate gigantic images in contiguous portions of memory as you are trying to do. There are some memory limitations I've encountered when creating very large images.

Consider subdividing your images. This has the benefit of better memory management. If you edit one of your subdivided images, you won't have to update the entire image.


As an aside, a 16000 x 16000 at 4 bytes per pixel is roughly a gigabyte! That's huge. Good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文