在不正常的例子中
...
AviWriter1.Bitmaps.Add(Bitmap);
Bitmap.Free;  //去掉这句话. 因为这句话释放掉了第一张图片。
i:=i-1;另外,我注意到你在except中销毁bitmap会造成内存泄漏,因为程序如果正常执行的话,这些图片是不会释放掉的,当然要保证AviWriter1释放掉后在释放这些图片。 

解决方案 »

  1.   

    不知道你的 AviWriter1.Bitmaps是什么类型,如果是tlist的话。bitmap是不能释放的,因为tlist中加入的是指针。如果是 Tbitmap的话是, 等等 tbitmap没有add方法呀。哈哈
      

  2.   

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
    Bitmap:TBitmap;
    begin
     with AviWriter1 do
          while Bitmaps.Count > 0 do begin
             Bitmap := Bitmaps[0];
             Bitmap.Free;
             Bitmaps.Delete(0);
          end;
    end;
    bitmap 释放应该是没有问题的,
    在使用正常代码时使用上面代码释放没出问题,说明Bitmap.free 可行
      

  3.   

    不出问题,并不代表没有问题阿,呵呵,你后面的释放代码没出问题,但他可能根本没有工作。
    如果你一定要用一个tbitmap对象:          While i>0 do
              begin
                 Bitmap := TBitmap.Create;
                 Bitmap.LoadFromFile(OpenDialog1.Files[i-1]);
                 AviWriter1.Bitmaps.Add(Bitmap);
                 此时必须把位图指针保存起来(可保存到一个longint指针数组中)以在程序结束时进行释放
                 i:=i-1;
              end;
      

  4.   

    其实还不如用bitmap的动态数组