HOWEVER, LB can call ImageMagick. This free software can do just about every kind of graphic processing you could want or imagine. It can assemble BMPs saved from LB; scale them if desired; and output as an animation with my choice of time delay per image. Just install the portable version of ImageMagick in the same directory folder as the LB code and you have no issues over whole-path file names.
Now the problem is display. LB can't show the animation directly. However it can call a web browser to display them. Usually web pages that are not html but just an image can be displayed directly at Windows discretion, but I work under Linux/Wine and this didn't work directly- the window opened in the browser but showed nothing. So I included a routine to write an html page to display the image and call the browser to display that.
What I have now is code that creates the desired images, strings them into an animation, then calls the web browser to display it. This display does not have the distraction of seeing the build up of each layer's image, nor show any kind of tearing.
Now I can experiment with colours and what distortion each layer is to undergo.
NB; Web browsers get confused by < and > signs other than when paired round html tags. I'll put up a zipped copy of the code for anyone hit by this. And you need to unzip portable ImageMagick for Windows into your LB folder-directory.
' Assumes Linux/Wine/LB4.5 and PortableImageMagick ' in the directory this .bas file is stored. nomainwin global pi, col$: pi =3.14158265 WindowWidth =716 WindowHeight =740 open "Circle animator" for graphics_nsb as #wg #wg "trapclose quit" #wg "size 1 ; down ; fill 0 0 160 ; flush" calldll #kernel32, "Sleep", 2000 as long, ret as void #wg "backcolor 200 0 0 ; color 200 0 0" for x =50 to 650 step 50 for y =50 to 650 step 50 #wg "up ; goto "; x; " "; y #wg "down" #wg "circlefilled 20" next y next x #wg "flush" calldll #kernel32, "Sleep", 2000 as long, ret as void #wg "getbmp scr0 1 1 706 740" n =1 pi =3.14158265 t =-20 stp = 4 [around] print t, stp #wg "cls ; drawbmp scr0 0 0 ; flush" for x =50 to 650 step 50 for y =50 to 650 step 50 scan radius =int( ( ( x -350)^2 +( y -350)^2)^0.5) /30 theta =ATAN2( 350.1 -y, x -350.1) dx =t *radius /10 *cos( theta) dy =t *radius /10 *sin( theta) xx =x +dx yy =y -dy if x <350.1 and y <350.1 then xx =x -dx: yy =y +dy ' quadrant upper left if x >350.1 and y <350.1 then xx =x -dx: yy =y +dy: ' quadrant upper right if x >350.1 and y >350.1 then xx =x -dx: yy =y +dy: ' quadrant lower right if x <350.1 and y >350.1 then xx =x -dx: yy =y +dy ' quadrant lower left call hsv2rgb int( 360 *radius /20), 0.99, 0.99 ' hue, saturation, value #wg "up ; goto "; xx; " "; yy #wg "down ; backcolor "; col$ #wg "circlefilled 20" next y next x #wg "flush ; getbmp scr 1 1 710 700" bmpsave "scr", "ZZZZ" +right$( "000" +str$( n), 3) +".bmp" n =n +1 calldll #kernel32, "Sleep", 1000 as long, ret as void t =t +stp if t > 20 and stp >0 then stp =0 -stp: t =20: goto [around] if t > -20 and stp >0 then goto [around] if t > -20 and stp <0 then goto [around] 'wait calldll #kernel32, "Sleep", 2000 as long, ret as void IM$ ="convert -geometry 50%x50% -delay 50 ZZZZ*.bmp ZZZZani.gif" run "cmd.exe /c "; chr$( 34); IM$; chr$( 34), HIDE calldll #kernel32, "Sleep", 10000 as long, ret as void 'for i =1 to 10 'kill "ZZZZ" +right$( "000" +str$( i), 3) +".bmp" 'next i 'run "explorer.exe ZZZZani.gif" ' calls Wine/IE but doesn't display the gif <<<<< projectFile$ ="sampleH.html" Q$ =chr$( 34) open projectFile$ for output as #w #w "<html>" #w "<<body bgcolor=" +Q$ +"C0C080" +Q$ +">" #w "<center>" #w "<<h1>" #w "Animation output" #w "<</h1>>" #w "<mg src=" +chr$( 34) +"ZZZZani.gif" +chr$( 34) +">" #w "<p>" #w "</center>" #w "This animation was prepared, embedded in an html page and displayed in the web browser" #w "<p>" #w "<<hr>" #w "</body>" #w "</html>" close #w run "explorer.exe sampleH.html" close #wg wait sub quit h$ close #wg end end sub function ATAN2( y, x) Result$ = "Undetermined" If ( x =0) and ( y >0) then ATAN2 = pi /2: Result$ ="Determined" if ( x =0) and ( y <0) then ATAN2 =3 * pi /2: Result$ ="Determined" if ( x >0) and ( y =0) then ATAN2 =0: Result$ ="Determined" if ( x <0) and ( y =0) then ATAN2 =pi: Result$ ="Determined" If Result$ <>"Determined" then BaseAngle =ATN( abs( y) /abs( x)) If ( x >0) and ( y >0) then ATAN2 = BaseAngle If ( x <0) and ( y >0) then ATAN2 = pi -BaseAngle If ( x <0) and ( y <0) then ATAN2 = pi +BaseAngle If ( x >0) and ( y <0) then ATAN2 = 2 *pi -BaseAngle end if End Function sub hsv2rgb h, s, v ' hue 0-360, saturation 0-1, value 0-1 if h >=360 or s >1 or v >1 then call quit h$ c =v *s ' chroma h =h x =c *( 1 -abs( ( ( h /60) mod 2) -1)) m =v -c ' matching adjustment select case case h < 60 r = c: g = x: b = 0 case h <120 r = x: g = c: b = 0 case h <180 r = 0: g = c: b = x case h <240 r = 0: g = x: b = c case h <300 r = x: g = 0: b = c case else r = c: g = 0: b = x end select rd = abs( int( 256 *( r + m))) gn = abs( int( 256 *( g + m))) bu = abs( int( 256 *( b + m))) col$ =right$( " " +str$( rd), 3) +" " +right$( " " +str$( gn), 3) +" " +right$( " " +str$( bu), 3) end sub