我想实现一个简单的从源图片中切出一小块,然后保存成文件的功能,无奈本人太笨,从msdn中抄了一段,结果倒是可以实现,但是效果不好,非常的慢。我的源图是一张50MBytes 12786*10763大小的巴格达航拍图片,我要把它切成400块500*500大小的图,这不已经4个多小时了,还没切完呢……大家帮帮我吧,看着硬盘狂转,我好心疼哦~~ 有没有更好的办法呢?Bitmap tmpBmp = new Bitmap("E:\\baghdad_dwntwn_psh_sept10_2002_dg.jpg");
for (int i = 1; i < 20; i++)
for (int j = 0; j < 20; j++)
{
Rectangle destRect = new Rectangle(i*500, j*500, 500, 500);
Bitmap cloneBitmap = tmpBmp.Clone(destRect, format);
string filename = "img" + i.ToString() + j.ToString() + ".jpg";
cloneBitmap.Save("E:\\" + filename,ImageFormat.Jpeg);
}

解决方案 »

  1.   

    Bitmap cloneBitmap = tmpBmp.Clone(destRect, format);format定义了吗?
      

  2.   

    呵呵 不好意思 format定义了,也是笔误~
    编译没问题,都跑起来了,跑了一晚上,把图切完了,可是这样太慢了,求一高效点的办法,谢啦
      

  3.   

    把Bitmap cloneBitmap移到 for 外面去定义试试
    然后在 for 里加上 cloneBitmap.Dispose()不然这么快的FOR会狂吃内存
      

  4.   

    多谢楼上二位,的确是“狂吃内存”,峰值在170M左右,均值也有130多M,待我试试,多谢多谢另外就是这个bitmap的clone的过程,是只clone我每次要的destRect那一小块还是先自己完整的clone下来再切出一小块保存呢?看样子像是后者,还请高手指点
      

  5.   

    或者使用
    using(Bitmap bitmap = new Bitmap())
    {
    }让系统自己释放资源。
      

  6.   

    楼上的意思是不是让我显式释放bitmap?这样可以提高效率么?没想明白……如果每次循环都显示释放cloneMap也许可以。谢谢啦