日期:2014-05-18  浏览次数:21343 次

能够创建的最大的Bitmap是多少
int a = 2000;
Bitmap c = new Bitmap(a,a)


以上代码中,如果a值比较大的时候,出现异常"Invalid parameter",说明系统能够创建的最大位图是有一个上限的。而且这个上限和硬件系统相关,硬件系统越大,上限越大。

现在,我想生成一个很大的JPG图片,比如40000*8000,准备创建一个40000*8000的位图,描画完成后,保存为JPG文件。但是,在一些低性能计算机上,无法创建这么大的位图,我应该如何处理?

还有一个办法,就是创建1000个小位图,描画完成后,再保存为1000个JPG文件,最后把这1000个文件合并成一个大的JPG?可是,谁有文件合并的算法阿?

------解决方案--------------------
MSDN上没提到大小限制。
int倒是有大小限制
Integer.MAX_VALUE = 2^31 -1 = 2147483647
Integer.MIN_VALUE = - 2^31 = -2147483648
------解决方案--------------------
软件警告一下,计算机配置太低。

很多软件对于配置过低的安装的时候直接警告甚至不给安装。

低性能的机器怎么可能用来处理几万乘几千的分辨率呢?这种客户不至于那么穷。
------解决方案--------------------
如果我要创建一张长和宽都比int.MAX_VALUE大的图,那怎么办?
------解决方案--------------------
webconfig 该下.. 我就建往小了弄的, 往大了弄, 会失真的
------解决方案--------------------
探讨
如果我要创建一张长和宽都比int.MAX_VALUE大的图,那怎么办?

------解决方案--------------------
Int最大值一般够了,设计者当初就是有个假设的.假设你永远也无法使用超过int的数据,所以他给你了 
new Bitmap(int, int) 这样的类库. 实际上当初设计者也可以设计成 new Bitmap(long, long)但是设计者觉得这样没有意义,浪费内存. 并且设计者也没有涉及一个 BIGBitmap 的类库给你使用,那么证明他知道,如果在你确实有BT需要的时候 你可以自己去实现这个类库.
这个问题如果你觉得很有意义的话,你可以自己实现该类库,用long代替int.

但我要告诉你,其实很没有意义.这个问题不存在你在8楼所问的所谓的'正解'. 因为这不是个问题.

打个比方,你有个饭盒A,这个饭盒是为大多数人设计的,其空间可以满足适量大于等于 BIG级食量的人. 现在你的食量仅仅为 tittle级食量.但是你异想天开的想法想到:如果我的食量大于BIG级食量怎么办.
怎么能够利用饭盒A来解决我想象的问题,然后需要正解..........

明白了吗? 正解不存在,同时问题也很那个.