在不正常的例子中
...
AviWriter1.Bitmaps.Add(Bitmap);
Bitmap.Free; //去掉这句话. 因为这句话释放掉了第一张图片。
i:=i-1;另外,我注意到你在except中销毁bitmap会造成内存泄漏,因为程序如果正常执行的话,这些图片是不会释放掉的,当然要保证AviWriter1释放掉后在释放这些图片。
...
AviWriter1.Bitmaps.Add(Bitmap);
Bitmap.Free; //去掉这句话. 因为这句话释放掉了第一张图片。
i:=i-1;另外,我注意到你在except中销毁bitmap会造成内存泄漏,因为程序如果正常执行的话,这些图片是不会释放掉的,当然要保证AviWriter1释放掉后在释放这些图片。
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 可行
如果你一定要用一个tbitmap对象: While i>0 do
begin
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(OpenDialog1.Files[i-1]);
AviWriter1.Bitmaps.Add(Bitmap);
此时必须把位图指针保存起来(可保存到一个longint指针数组中)以在程序结束时进行释放
i:=i-1;
end;