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

C# “C”;参数无效。”;创建新位图,c#,parameters,bitmap,size,C#,Parameters,Bitmap,Size,如果我试图创建一个大于19000像素的位图,我会得到一个错误:参数无效。 我如何解决这个问题 System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000); 请记住,您正试图使用该位图分配大量内存 指 NET很可能拒绝创建一个一次就占用那么多连续内存的映像 稍难阅读,但此参考资料也有帮助: 系统中的每个图像都有以下公式定义的内存量: 位深*宽*高/8 这意味着图像40800像素乘4050将需要超过660像素 兆字

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

System.Drawing.Bitmap myimage= new System.Drawing.Bitmap(20000, 20000);

请记住,您正试图使用该位图分配大量内存

NET很可能拒绝创建一个一次就占用那么多连续内存的映像

稍难阅读,但此参考资料也有帮助:

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

位深*宽*高/8

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


我怀疑你遇到了内存上限问题。但是,位图构造函数失败的原因有很多。在
CreateBitmap
中关于GDI+限制的讨论中列出了主要限制
System.Drawing.Bitmap
,在构建位图时,在内部使用GDI原生API


这就是说,这种大小的位图远远超过GB的RAM,很可能是达到了扫描线大小限制(64KB)或内存不足。

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


你为什么需要这么大的图像尺寸?在计算机显示器上以1280x1024分辨率观看,一侧19000像素的图像将是14个屏幕宽18个屏幕高。我只能想象你正在制作高质量的打印图形,在这种情况下,720dpi的图像将是一张26英寸的正方形海报。

在打开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 ("");
    }
}

新建位图时设置像素格式,如:

new Bitmap(2000, 40000,PixelFormat.Format16bppRgb555)

根据上面的确切数字,它对我很有用。这可能部分解决了问题。

指定较小的像素格式?默认为32bpp“为什么需要如此大的图像大小?”?一个可能的原因是:他可能正在将一个图像文件加载到位图对象中,然后他想将其调整为更小的大小。现在看起来有点不那么通俗了——让我们看看20262020年的情况如何。我的笔记本电脑有32gb内存,我想用它。2021年来电。仍在隔离中。