Unique frame sizes
BlitzMax Forums/BlitzMax Programming/Unique frame sizes| 
 | ||
| I have a friend who's interested in switching from a BASIC variant to BM for a project.  However he has a single image with multiple "frames" each containing an art asset to cut down on loading times.  He want to know if he could load these from a file and use them.  The problem arises is that these images are not the same size. | 
| 
 | ||
| You can't do it in the conventional way with LoadAnimImage() but there's nothing to stop you using an array or list of TImages to achieve the same effect. | 
| 
 | ||
| Right, but he's concerned about loading time. | 
| 
 | ||
| Any of the above methods will execute in pretty much the same [small] amount of time. | 
| 
 | ||
| You can use PixmapWindow(), something like this. 
'Image1 is located at coordinates 0,0 and is 128x96
'Image2 is located at 128,0 and is 32x32
local TempPixmap:TPixmap = LoadPixmap("File.png") 'Load the file
Local Image1:TImage = LoadImage(PixmapWindow(TempPixmap,0,0,128,64)) 'extract the first image
Local Image2:TImage = LoadImage(PixmapWindow(TempPixmap,128,0,32,32)) 'extract the second image
TempPixmap = Null 'Not needed anymore
...Comtinue with the rest of program
 | 
| 
 | ||
| One technique some people use is they choose a specific color which does not appear/is not used anywhere in their graphics - like a bright green or bright pink. Then they put all of their various images onto a sprite sheet type of thing and draw boxes around them in the chosen color. Then you load the pixmap in  BlitzMax and write a small routine which basically looks at each pixel and `finds` the bounding rectangles and then extracts the frames from it (using pixmap window for example). Another way is to just put all your images on a sprite sheet pixmap, load it, turn the entire thing into an image, and then make some graphics code to render only part of the image. |