程序主要代码如下:是用来分割图片的.
代码运行后,图片数量少时,没问题,当数量比较多时,就报内在不足.
请高手帮忙解决一下啊!Bitmap originalBitmap;
Bitmap secondBitmap;

string[] dirs = Directory.GetFiles(textBox1.Text);
foreach (string dir in dirs) 
{
string[] filename=dir.Split('\\');
string[] fname=filename[filename.Length-1].Split('.');
originalBitmap = new Bitmap(dir);
for(int i=0;i<arr.Count;i++)
{
imgDes imgTmp=(imgDes)arr[i];
Rectangle angle1=new Rectangle(imgTmp.x,imgTmp.y ,imgTmp.width,imgTmp.height);
secondBitmap = originalBitmap.Clone(angle1,PixelFormat.DontCare);
switch(fname[1].ToLower())
{
case "jpg":
case "jpeg":
secondBitmap.Save(textBox2.Text +'\\'+ fname[0]+imgTmp.filename +"."+fname[1], System.Drawing.Imaging.ImageFormat.Jpeg  ) ;
break;
case "tif":
case "tiff":
secondBitmap.Save(textBox2.Text +'\\'+ fname[0]+imgTmp.filename +"."+fname[1], System.Drawing.Imaging.ImageFormat.Tiff) ;
break;
}
secondBitmap.Dispose();
secondBitmap=null;
System.GC.Collect();
  }
  originalBitmap.Dispose();
  originalBitmap=null;
  System.GC.Collect();}

解决方案 »

  1.   

    最近对ExpressQuantumGrid 也就是cxGrid做了一些改动,大家看看是否实用。(含Source可下载) 
    增加了: 
    1、分组行是否隐藏
    2、分组字段是否隐藏
    3、分组行的(+/-)号是否显示
    4、分组行缩排的功能
    5、多个字段做为一个组来同级分组
    (比如将编号和名称合并做为同一级来分组)
    下载地址:
    http://www.dcmscn.cn/dispbbs.asp?boardid=8&id=308
      

  2.   

    to server-me,我的代码是想遍历一下文件夹下的所有图片文件.无论分辨率多大.也就是说,我想对一批图像处理,我写了句secondBitmap.Dispose();
    secondBitmap=null;
    System.GC.Collect();就是希望图片在处理完后,立刻收回内存.可是也还不行啊.希望高人们帮忙啊.
      

  3.   

    to niwalker,我又改了一下,把那个imgTmp的定义拿出去了,还是不行啊.那个东西只是一个结构的对象.大家再帮帮忙忙啊.
      

  4.   

    c#不是说每个case都必须有break的么?是否会跟这有关呢?猜想 可以试试
      

  5.   

    应该是在这里出错了:Rectangle angle1=new Rectangle(imgTmp.x,imgTmp.y ,imgTmp.width,imgTmp.height);
    secondBitmap = originalBitmap.Clone(angle1,PixelFormat.DontCare);如果 Rectangle 超出了originalBitmap的Size时会报"内存不足.",我遇到过这种情况.检查出错时的图像文件Size与Rectangle 试试看.
      

  6.   

    超出内存不足? 还是过小而导致originalBitmap.Clone没有内存可以存放?
      

  7.   

    看了Msdn takemoto(竹本)是对的,是超出图像大小会出异常OutOfMemoryException:(