当前位置: 代码迷 >> 综合 >> UI(18)——创建Bitmap时因尺寸问题导致“System.ArgumentException Message=参数无效”
  详细解决方案

UI(18)——创建Bitmap时因尺寸问题导致“System.ArgumentException Message=参数无效”

热度:117   发布时间:2023-10-01 13:34:16.0

问:

捕捉到 System.ArgumentExceptionMessage=参数无效。Source=System.DrawingStackTrace:在 System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)在 System.Drawing.Bitmap..ctor(Int32 width, Int32 height)

由于项目需要导出完整图片,我使用Bitmap(int width, int height)创建Bitmap并保存,但是在实际中有些时候width和height比较大,超过了10000,在new的时候就报参数无效的错误,但是由于项目要求,又不能对图片进行切割,请问还有没有别的方法可以让我导出这种超大尺寸的图片吗?

这是我的问题截图:(VS2019)

UI(18)——创建Bitmap时因尺寸问题导致“System.ArgumentException Message=参数无效”

答:

http://bbs.csdn.net/topics/310014905 创建超大图。

http://bbs.csdn.net/topics/90300658 转成流处理。

以上两种方法你都可以试试,个人觉得转成流会更好一点,不用考虑大小了。

你好,我现在要做的是new 一个1w*1w的Bitmap,还没做到保存读取的地步呢,你给的两个链接我也都看过了,没发现有创建超大图片的方法。

第一个链接讲的就是生成超大的图片的方法,你细看一下,另外第二个链接也是讲用流生成大图片。

你好,第一个链接是验证他们的电脑最大能创建多大的图片,但是明显的不符合我的要求,也许的电脑运行的程序太多了,我这儿能创建的最大的图片都不超过1W。这两个链接我前后算上今天看了3天了。

呃 不好意思~我误解你了, 文中也有提到,与电脑的内存有关系,建议你可以测试一下,找一台大内存的机器试试。

没事,我这机器上开了俩VS2012,还有浏览器,QQ等各种软件,我估计得另辟途径,要是能直接在硬盘上创建个Bitmap,就好了,这样就不会有这种大小的限制了。

在硬盘生成是不可以的,因为生成Bitmap的代码是在内存中处理的,只有生成完后才能保存了硬盘,所以还是换机器测试吧

请问你的Bitmap是android中的吗?

不是,就是普通的Winform,C#.Net运行在桌面上的应用程序。

试了一下, 创建Drawing.Bitmap的函数时会分配其相应的内存,分配的内存数则是很简单的 长*宽*4 了。

当申请20000*20000大小的图片的时候,需要1.57g内存,而默认的winform程序是32位的,分配不到1.5g内存的,申请内存失败后就报这个参数异常了。此时把程序改成64位的就没有问题了。

只要没有超过内存限制,简单的改用64位程序就可以处理很大的图片了。

对于超大图片,则需要根据bmp文件的格式自己写算法划片处理,直接生成文件了

最后解决这个创建超大图片的问题了。

首先将图片分割成m * n个小图片,分别使用GDI+绘制出来,然后使用GDAL组件把这些图片合并起来,就OK了。

  相关解决方案