If it was up to me I'd save each frames into a separate image, but make sure you know where you saved it too. Might want to use a pointer.
For example:
PointerGUI = 200
PointerChar = 500
for lp = 0 to 10
get image PointerGUI+lp, x1,y1,x2,y2, 1
next lp
for lp = 0 to 10
get image PointerChar+lp, x1,y1,x2,y2, 1
next lp
Meaning all the image pointer used to save the Gui images are in range from 200~499 and all the ones used for the Character(s) are 500~xxx.
Next step is the animation. I'd use an array for this:
Up = 0 :rem Use this as constants for Directions the Character is facing.
Lf = 1
Rt = 2
Dn = 3
Stand = 0 :rem Use these as constants as Actions the character is performing.
Walk = 1
Attack = 2
AmountDirection = 3 :Rem Use these to setup the Animation Array and other purposes.
AmountAction = 2
AmountFrame = 9
Dim Animation(AmountDirection,AmountAction,AmountFrame)
rem This is how I store my Animation frames. Each iteration of this loop will store the first set of values into
rem the proper index in the array that was just set up and so on. So Animation(0,0,0) = val("000")
for lp = 0 to AmountFrame
Animation(Up,Stand,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Up,Walk,lp) = val(right$(left$(".001.002.003.004.005.006.007.008.009.010",4+lp*4),3))
Animation(Up,Attack,lp) = val(right$(left$(".011.012.013.014.015.000.000.000.000.000",4+lp*4),3))
Animation(Lf,Stand,lp) = val(right$(left$(".016.016.016.016.016.016.016.016.016.016",4+lp*4),3))
Animation(Lf,Walk,lp) = val(right$(left$(".017.018.019.020.021.022.023.024.025.026",4+lp*4),3))
Animation(Lf,Attack,lp) = val(right$(left$(".027.028.029.030.031.000.000.000.000.000",4+lp*4),3))
Animation(Rt,Stand,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Rt,Walk,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Rt,Attack,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Dn,Stand,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Dn,Walk,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
Animation(Dn,Attack,lp) = val(right$(left$(".000.000.000.000.000.000.000.000.000.000",4+lp*4),3))
next lp
rem So if you want to draw the 4th Animation frame of the Character walking Left at (200,150).
PointerChar = 500 :rem From the previous example.
Cx = 200
Cy = 150
Direction = Lf
Action = Walk
Frame = 4
Paste image PointerChar+Animation(Direction,Action,Frame), Cx, Xy, 1
These are the basics of the method I personaly use. There are no single correct way of coding and you can find many many ways to get the same effect, some being more or less effective as others in areas such as speed or memory consumptions, but as long as it works with you.