本帖最后由 Merlin_Bloom 于 2013-08-19 12:17:46 编辑

解决方案 »

  1.   

    巧啊,本人前段时间也是遇到这个问题。以为是c#内部的限制。后来经过测试,不同的内存配置,这个最大尺寸也是改变的。最简单暴力的方式就是增加内存。当然,你也可以使用第三方开源库,比如GDAL。好使,好使,太好使了!
      

  2.   

    LZ的机器是8G的内存,也会受到限制?LZ是32位还是64位系统?
      

  3.   

    @hwenycocodq520 :医疗影像,用途多多;
    @conmajia :要拼成一个大的,总归逃不掉图像大小啊;
    @laviewpbt :我们美国分部那边,已经实现了4G图像的拼接哦,大的甚至windows photo viewer都打不开。老板的意思是,国内先做做;
    @mosangbike :怎么增加内存?硬件内存已经8G了。编译器里设置吗?在哪里?;
    @jflanmay :win7 64 bit,ultimate。SOS~~
      

  4.   

    我记得BMP文件是由一个固定长度的文件头和内容(数据)区组成的吧?
    那么其实直接操作文件流应该更好一些。
    比如a.bmp和b.bmp合并成c.bmp,其实只需要直接创建c.bmp,写文件头的时候把长宽计算对,然后数据区就分别读a,b文件进来就好了,好像最多要注意一个什么每行字节补齐还是什么的操作?搜一下BMP文件格式就ok了。
      

  5.   

    GDI+中的bitmap大小是按照机器位数计算的,好像32位不能分配到20000*20000,64位没这个限制,但是位图大小占用内存可能会超过你的实际内存,所以还是会报错。这样就先创建位图的缓存硬盘文件,然后一段段写进去就行了。也就是1楼说的,打完收工。
      

  6.   

    @silwol:这种基础的问题偶当然已经解决啦。。现在的问题是,因为图片太大,这个C.bmp,无法创建;
    @tcmakebest:医疗应用,有另外显示和分析这么狂大的图片程序;
    @yuwenge:是 64位的 ;用MemoryStream或者FileStream,然后自己写图像文件头,再把像素拼进去?好思路,偶试试!(PS:是2楼说的)。
    @mosangbike:GDAL,也试试!
    =我的好消息
      

  7.   

    你文件大小几百M,在内存显示或处理却是要十几G或以上的,这个时候拼接不能用内存方式,用写文件方式实现,GDAL有栅格处理的,拿来用就好。题外话,拼那么大的图像,打开也是吃力的
      

  8.   

    只用过java..对c方面的都不太懂....围观一下
      

  9.   

    @ayun00 :分部那边是和另外一个公司合作开发,很多技术上的事情纠缠不清,国内独立做;
    @langyuewu :昨天才发现,我用bmp.save,都存成png格式了-_-;
    @aisitt :欢迎围观,技术无疆界
      

  10.   

    @kxyzjm62 :有专门的显示处理程序,已经在用了
      

  11.   

    这么大的图片文件恐怕直接使用Bitmap类是无法做到了, 必须直接和内存 以及图片格式打交道吧
    数据内存方面我觉得 要么自己维护一个大数据结构(不过图片能到2g,这个方法估计也不会太靠谱)
    要么就是 “Windows内存映射文件”的方法了
    至于图片编码格式嘛 我也就只能想到bmp这样的不压缩直接按像素读写的方法了……
      

  12.   

    你的显示处理程序是一次显示一个500M-2G的图片吗,对于一个常用的显示器来说,能把你的图片的以它的真实分辨率显示出来吗?
    这些都不用纠结,我要做的就是拼出一个2G或者更大的BMP文件。