CMM2 graphics examples and explanation
| Author | Message | ||||
| matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 11174 |
I'll just finish off the previous post as promised IMAGE RESIZE and IMAGE ROTATE use some fairly complex math to scale and rotate images. They are therefore comparatively slow compared to actions like page copies but useful nevertheless. An example of rotation is available here. In fact this was done on an early release of the code and various enhancements have speeded it up somewhat since then. As an example of their use lets take an 800x600 image that is in landscape and scale and rotate it to a 600x450 image in portrait. This then gives us the worst case timings for the two functions - biggest image, highest colour depth. tigerside800.zip 'Set to 800x600 16 bit mode ' NB to use this mode it must be unlocked first with OPTION MODES UNLOCKED mode 1,16 'set output to page 1 page write 1 ' lets see how long it all takes timer=0 'load our 800x600 image to page 1 load jpg "tigerside800" page write 0 print @(0,0)"Time to load JPG" print timer/1000, "seconds" timer=0 page write 1 'When we rotate the image it can't be more than 600 pixels high so resize it 'Check the manual for syntax but we are specifying to resize it and place the resized image centrally over the old image image resize 0,0,800,600,100,75,600,450 page write 0 print "Time to resize" print timer/1000, "seconds" timer=0 page write 1 'Now we need to rotate the image 'In the case of the example this is a rotation of 270 degrees clockwise to get it the correct way up ' Note that the rotated image has to fit into a new area no bigger than the area to be rotated 'So we need to rotate a square area as big as the biggest dimension we need in the result image rotate 100,0,600,600,100,0,270 page write 0 print "Time to rotate" print timer/1000, "seconds" timer=0 'Now we can go back to page 0 page write 0 ' Copy the part of page 1 containing the rotated image to page 0 using BLIT blit 175,0,175,0,450,600,1 print "Time to copy" print timer/1000, "seconds" do loop ![]() One important thing to note is that resizing and rotating by definition lose some information and accuracy. For this reason if you want to do something like the rotating image in the video you should do each rotation from the original rather than incrementally rotating the previous result otherwise the image will quickly degenerate. Next post we start on sprites by learning what is a sprite and the various ways to create them Edited 2020-05-16 22:12 by matherp |
||||