Hoy he tenido un día muy liado. No tengo tiempo de analizar despacio tu código. Sólo decirte que CreateSubstractBitmap Crea un HBITMAP que debe ser liberado bien por la API DeleteObject, o bien por un objeto TBitmap al que se le asigna dicho HBITMAP.
Por lo demás decirte que Grandes bucles con repetición de llamadas a CreateSubstractBitmap no crean problemas con la memoria:
Código Delphi
[-]var
i: integer;
Bitmap: TBitmap;
begin
for i:= 0 to 3500 do
begin
Bitmap:= TBitmap.Create;
Bitmap.Handle:= CreateSubstractBitmap(Image2.Canvas.Handle, Image1.Canvas.Handle);
Image3.Picture.Bitmap.Assign(Bitmap);
Bitmap.Free;
end;
end;
Saludos.