Handling anim images

BlitzMax Forums/BlitzMax Beginners Area/Handling anim images

Ashes(Posted 2016) [#1]
I am trying to create an animation strip from multiple single frame pngs.

I make a new image variable:
 spriteImage = CreateImage(frameWidth * frameCount, frameHeight, frameCount) 


and use a for loop to add each frame to the newly created image


All is fine until this point. Now I want to draw various frames from it and cant do it, frame 0 is the whole image. How do I use this image as an anim image without saving it and loading it with loadanimimage? Is there a way to specify the cell width and height?

Thanks.


TomToad(Posted 2016) [#2]
Instead of creating an image, just create a pixmap and paste all your frames in. Then when you are done, use LoadAnimImage() to load the pixmap into the image.
Local spritePixmap:TPixmap = CreatePixmap(frameWidth * frameCount, frameHeight, frameCount,PF_RGBA8888)

for Local i:int = 0 Until FrameCount 'in your for/next loop

Local compositeFilename:String = GetCompositeFilename(i) 'get the filename of next image

Local framePixmap:TPixmap = LoadPixmap(filePath + compositeFilename)
If Not framePixmap Then RuntimeError("Something went wrong")

spritePixmap.Paste(framePixmap, currentFrame * framePixmap.Width,0)

Next

Local spriteImage:TImage = LoadAnimImage(spritePixmap,frameWidth,frameHeight,0,frameCount)

spritePixmap = Null 'Free the memory used by the pixmap



Ashes(Posted 2016) [#3]
Thank you very much. I didn't know you can pass pixmaps as url in loadanimimage or that you can create a pixmap from loading an image.

I thought that if I can pass a pixmap as url I should be able to pass an image as well but that is not the case. Any idea why?

I also found another way, I create an image the size of a single frame with proper frame count and instead of pasting the pixmap, i use

 spriteImage.SetPixmap(currentFrame, framePixmap) 
It seems that anim images in BlitzMax are just arrays of single frame pixmaps.