如果我尝试创建一个大于19000像素的位图,我会收到错误:参数无效。 我该如何解决这个问题?
System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000);
答案 0 :(得分:31)
请记住,这是您尝试使用该位图分配的大量内存。
请参阅http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/
.NET很可能拒绝创建一次占用大量连续内存的图像。
稍微难以阅读,但此参考也有帮助:
系统中的每个图像都有此公式定义的内存量:
bit-depth * width * height / 8
这意味着图像40800像素乘4050将需要超过660 兆字节的内存。
答案 1 :(得分:7)
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“方形的海报。
答案 2 :(得分:6)
我怀疑你遇到了内存上限问题。但是,位图构造函数可能会失败的原因有很多。主要问题列在this Knowledge Base article中,讨论CreateBitmap
中的GDI +限制。内部System.Drawing.Bitmap
在构造位图时使用GDI本机API。
话虽这么说,这个大小的位图远远超过GB的RAM,并且你可能要么达到扫描线大小限制(64KB)或内存不足。
答案 3 :(得分:3)
在新位图时设置PixelFormat,例如:
new Bitmap(2000, 40000,PixelFormat.Format16bppRgb555)
并且上面的确切数字对我有用。这可能部分解决了这个问题。
答案 4 :(得分:0)
打开TIF文件时出现此错误。问题是由于无法打开CMYK。将颜色空间从RGB更改为CMYK并且没有出错。
所以我使用taglib库来获取图像文件大小。
代码示例:
UTF-8 with BOM