首页 新闻 会员 周边 捐助

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

0
悬赏园豆:30 [已关闭问题] 关闭于 2017-04-19 17:25
捕捉到 System.ArgumentException
  Message=参数无效。
  Source=System.Drawing
  StackTrace:
       在 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的时候就报参数无效的错误,但是由于项目要求,又不能对图片进行切割,请问还有没有别的方法可以让我导出这种超大尺寸的图片吗?谢了

问题补充:

哎呦,怎么没人回答啊

油纸伞的主页 油纸伞 | 初学一级 | 园豆:47
提问于:2013-11-28 09:57
< >
分享
所有回答(4)
0

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

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

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

Zery | 园豆:6151 (大侠五级) | 2013-11-28 10:24

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

支持(0) 反对(0) 油纸伞 | 园豆:47 (初学一级) | 2013-11-28 10:28

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

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2013-11-28 10:35

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

支持(0) 反对(0) 油纸伞 | 园豆:47 (初学一级) | 2013-11-28 10:40

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

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2013-11-28 10:42

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

支持(0) 反对(0) 油纸伞 | 园豆:47 (初学一级) | 2013-11-28 10:45

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

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2013-11-28 11:26
0

请问你的Bitmap是android中的吗?

jianrong.zheng | 园豆:550 (小虾三级) | 2013-11-28 10:50

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

支持(0) 反对(0) 油纸伞 | 园豆:47 (初学一级) | 2013-11-28 10:51
0

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

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

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

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

天方 | 园豆:5432 (大侠五级) | 2013-11-28 22:02

请问,你那有类似的算法或者相关资料吗?谢了

支持(0) 反对(0) 油纸伞 | 园豆:47 (初学一级) | 2013-11-29 09:19
0

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

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

油纸伞 | 园豆:47 (初学一级) | 2017-04-11 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册