C#"参数无效".创建新的位图

teo*_*omi 31 c# size parameters bitmap

如果我尝试创建一个大于19000像素的位图,我会收到错误:参数无效.我该如何解决这个问题?

System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000);
Run Code Online (Sandbox Code Playgroud)

Zha*_*ais 34

请记住,这是您尝试使用该位图分配的大量内存.

请参阅http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/

.NET很可能拒绝创建一次占用大量连续内存的映像.

稍微难以阅读,但这个参考也有帮助:

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.drawing/2005-06/msg00176.html

系统中的每个图像都具有此公式定义的内存量:

bit-depth * width * height / 8

这意味着图像40800像素乘4050将需要超过660兆字节的内存.


Kei*_*thS 8

19000像素的正方形,32bpp,需要11552000000位(1.37 GB)才能将光栅存储在内存中.那只是原始像素数据; System.Drawing.Bitmap中固有的任何额外开销都会增加.在相同颜色深度上达到20k像素的正方形,仅需要1.5GB的原始像素存储器.在单个对象中,您在32位环境中使用为整个应用程序保留的3/4空间.64位环境具有更宽松的限制(通常),但您仍然使用单个对象的最大大小的3/4.

你为什么需要如此庞大的图像尺寸?在计算机显示器上观看1280x1024 res,一侧19000像素的图像宽14屏,高18屏.我只能想象你正在制作高质量的印刷图形,在这种情况下720dpi的图像将是26"方形的海报.

  • "为什么你需要如此庞大的图像尺寸?" 可能的原因:他可能正在将图像文件加载到Bitmap对象中,然后他想要调整较小的大小. (5认同)
  • 2020 年到来了。我的笔记本电脑有 32GB 内存,我想使用它。 (5认同)
  • 2019年即将来临。现在看起来不再那么庞大-让我们看看2026年的情况如何 (4认同)
  • 2021 年来临。仍在隔离中。 (4认同)

Ree*_*sey 6

我怀疑你遇到了内存上限问题.但是,位图构造函数可能会失败的原因有很多.这篇知识库文章中列出了主要内容,讨论了GDI +限制CreateBitmap. System.Drawing.Bitmap在内部,在构造位图时使用GDI本机API.

话虽这么说,这个大小的位图远远超过GB的RAM,并且你可能要么达到扫描线大小限制(64KB)或者内存不足.


小智 5

新建位图时设置PixelFormat,例如:

new Bitmap(2000, 40000,PixelFormat.Format16bppRgb555)
Run Code Online (Sandbox Code Playgroud)

而上面的确切数字对我有用。这可以部分解决问题。