Code archives/Graphics/Image Recursion
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This is a demo of a strange form of recursion-- draw something to the screen, take a screencap, then rotate and scale the screencap, draw it to the screen, and so on and so on. Have fun! I don't know who wrote the tileimage2 function in here, it's there to fix some perceived brokenness in tileimage. | |||||
' recur Graphics 640,480 Global textstring$="So here's this. Just a little something... it starts out slow and picks up. I'm sure I'm not the only person to come up with this. The basic idea is video recursion, like you get if you point a video camera at the video display for that camera-- forms appear and twist and turn into whirlpools of color. The concept was described in Godel, Escher, Bach by Douglas Hofstader..." windowgrab=CreateImage(640,480) timer = CreateTimer(30) DrawRect 213,213,213,213 GrabImage windowgrab, 0,0 While KeyDown(key_escape)=0 And ticks < 2170 SetRotation 0 tileimage2 windowgrab,0,0 ticks = ticks + 1 SetAlpha 255 SetBlend alphablend SetRotation Cos(ticks)*ticks/10 SetScale (1-Sin(ticks)+.1)*.5,(1-Cos(ticks)+.1)*.5 tileimage2 windowgrab,Sin(ticks)*640,Cos(ticks)*640 SetScale .5,.5 SetColor 200,200,200 SetRotation Sin(ticks)*ticks/10 tileimage2 windowgrab,0,0 SetScale 1,1 SetColor 255,255,255 SetHandle 160,160 SetColor 100,0,100 SetRotation 0 SetColor 0,0,0 SetScale 2,2 SetHandle 0,0 SetScale 8,8 SetColor 0,0,0 DrawText textstring$, 220-ticks*15,220 SetColor Rand(128)+128,Rand(128)+128,Rand(128)+128 DrawText textstring$, 213-ticks*15,213 SetScale 1,1 Print ticks WaitTimer timer Delay 10 GrabImage windowgrab, 0,0 Flip Wend Function TileImage2 (image:TImage, x:Float=0# ,y:Float=0#, frame:Int=0) Local scale_x#, scale_y# GetScale(scale_x#, scale_y#) Local viewport_x%, viewport_y%, viewport_w%, viewport_h% GetViewport(viewport_x, viewport_y, viewport_w, viewport_h) Local origin_x#, origin_y# GetOrigin(origin_x, origin_y) Local handle_X#, handle_y# GetHandle(handle_X#, handle_y#) Local image_h# = ImageHeight(image) Local image_w# = ImageWidth(image) Local w#=image_w * Abs(scale_x#) Local h#=image_h * Abs(scale_y#) Local ox#=viewport_x-w+1 Local oy#=viewport_y-h+1 origin_X = origin_X Mod w origin_Y = origin_Y Mod h Local px#=x+origin_x - handle_x Local py#=y+origin_y - handle_y Local fx#=px-Floor(px) Local fy#=py-Floor(py) Local tx#=Floor(px)-ox Local ty#=Floor(py)-oy If tx>=0 tx=tx Mod w + ox Else tx = w - -tx Mod w + ox If ty>=0 ty=ty Mod h + oy Else ty = h - -ty Mod h + oy Local vr#= viewport_x + viewport_w, vb# = viewport_y + viewport_h SetOrigin 0,0 Local iy#=ty While iy<vb + h ' add image height to fill lower gap Local ix#=tx While ix<vr + w ' add image width to fill right gap DrawImage(image, ix+fx,iy+fy, frame) ix=ix+w Wend iy=iy+h Wend SetOrigin origin_x, origin_y End Function |
Comments
| ||
Hi, zoqfotpik, this one looks familiar, I feel as if I've seen it before. It's apparently really a .BMX file, but it's downloading as a *.BB file. [ Here's a minor redo, I renamed them to *.BMX, and converted the comments to proper BlitzMAX comments. ] Color Cycling and Procedural Critters :: http://uploadingit.com/file/xnrveey7fjoc93mk/Color%20Cycling%20and%20Procedural%20Critters_3089.bmx RTS Drag Effect :: http://uploadingit.com/file/dmoxb7q8pplmotpz/RTS%20Drag%20Select_3088.bmx Image Recursion :: http://uploadingit.com/file/kv2u1husmv3ulyob/Image%20Recursion_3087.bmx |
Code Archives Forum