C#“参数无效。”创建新的位图

| 如果尝试创建大于19000 px的位图,则会出现错误:参数无效。 我该如何解决?
System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000);
    
已邀请:
        请记住,这是您尝试使用该位图分配的大量内存。 请参阅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
     这意味着4050像素乘4050的图像将需要超过660   兆字节的内存。     
        19000像素正方形(32bpp)将需要11552000000位(1.37 GB)将栅格存储在内存中。那只是原始像素数据; System.Drawing.Bitmap中固有的任何其他额外开销都会添加到其中。在相同的色深下,要达到2万像素正方形,仅原始像素内存就需要1.5GB。在单个对象中,您使用的是在32位环境中为整个应用程序保留的空间的3/4。 64位环境通常具有较宽松的限制,但是您仍在使用单个对象最大大小的3/4。 为什么需要如此大的图像尺寸?在计算机监视器上以1280x1024分辨率观看时,侧面19000像素的图像将是14个屏幕宽乘18个屏幕高。我只能想象您正在制作高质量的打印图形,在这种情况下,720dpi的图像将是26英寸的方形海报。     
        我怀疑您正在遇到内存上限问题。但是,位图构造函数可能会失败的原因有很多。这篇知识库文章中列出了主要的内容,其中讨论了
CreateBitmap
中的GDI +限制。
System.Drawing.Bitmap
内部在构造位图时使用GDI本机API。 就是说,这种大小的位图恰好超过GB的RAM,很可能您已达到扫描线大小限制(64KB)或内存不足。     
        新建位图时设置PixelFormat,例如:
new Bitmap(2000, 40000,PixelFormat.Format16bppRgb555)
并且上面有确切的数字,对我有用。这可以部分解决问题。     
        打开TIF文件时出现此错误。问题是由于无法打开CMYK。将色彩空间从RGB更改为CMYK,但未收到错误。 所以我改用taglib库来获取图像文件的大小。 代码示例:
try
{
    var image = new System.Drawing.Bitmap(filePath);
    return string.Format(\"{0}px by {1}px\", image.Width, image.Height);
}
catch (Exception)
{
    try
    {
         TagLib.File file = TagLib.File.Create(filePath);
         return string.Format(\"{0}px by {1}px\", file.Properties.PhotoWidth, file.Properties.PhotoHeight);
    }
    catch (Exception)
    {
         return (\"\");
    }
}
    

要回复问题请先登录注册