Best way to split up image into smaller pieces?
BlitzMax Forums/BlitzMax Beginners Area/Best way to split up image into smaller pieces?| 
 | ||
| Hi! I'd like to do a simple puzzle game. For this I need to split up a original image of 340x340 pixels into 10x10 square blocks, 34 pixels each. I need to be able to select each separate piece later on. How would be the best way of doing this? Thanks, Grisu | 
| 
 | ||
| Use some scissors? ;-) | 
| 
 | ||
| Or try LoadAnimImage() | 
| 
 | ||
| I want to create it in runtime! Sure I know how to load multiple images from HDD Angel... :P I already have the image in memory as I need it for other stuff, so how can I copy out multiple square images? | 
| 
 | ||
| use PixmapWindow ? | 
| 
 | ||
| Have you tried somthing like this: Rem
	Cut & Go
EndRem
SuperStrict 'FTW
SeedRnd(MilliSecs())
Graphics 800, 600
Const FRAMESX% = 10
Const FRAMESY% = 10
Global image:TImage = LoadImage("background1.png")
Global cutImage:TImage
Type TImageCutta
	Function CutImage:TImage(image:TImage, xTiles% = 2, yTiles% = 2)
	
		Local fWidth% = image.width / xTiles
		Local fHeight% = image.height / yTiles
		Local tTotal% = xTiles * yTiles
		
		Local cut:TImage = CreateImage(fWidth, fHeight, tTotal)
		
		Cls
		DrawImage image, 0, 0
		
		Local xx%, yy%, cc%
		For Local x% = 0 Until xTiles
		
			For Local y% = 0 Until yTiles
			
				xx = x * fWidth
				yy = y * fHeight
				
				GrabImage(cut, xx, yy, cc)
				
				cc:+ 1
			
			Next
			
		Next
		
		
		Return cut
	
	
	End Function
End Type
cutImage = TImageCutta.CutImage(image, FRAMESX, FRAMESY)
Global puzzle%[FRAMESX, FRAMESY]
For Local x% = 0 Until FRAMESX
	For Local y% = 0 Until FRAMESY
	
		puzzle[x, y] = Rand(0, (FRAMESX * FRAMESY) - 1)
		
	Next
	
Next
While Not KeyHit(KEY_ESCAPE)
 	Cls
	For Local x% = 0 Until FRAMESX
		For Local y% = 0 Until FRAMESY
		
			DrawImage cutImage, x * cutImage.width, y * cutImage.height, puzzle[x, y]
			
		Next
		
	Next
	
	Flip
	
Wend | 
| 
 | ||
| img:TImage = LoadImage("image.png")
animg:TImage = LoadAnimImage(img.Lock(0, True, False), 34, 34, 0, 10) | 
| 
 | ||
| Thanks all! This is the code I use now. Nothing seems to be faster / easier: 
Graphics 800,600
Global PLATESIZE=68
Global PLATEMAX=340/PLATESIZE*340/PLATESIZE
Global img:TImage = LoadImage("media/1.jpg")
Global animg:TImage = LoadAnimImage(img.Lock(0, True, False), PLATESIZE, PLATESIZE, 0, PLATEMAX)
Global x:Int=0,y:Int=0
Global j:Int 
For Local i=0 To PLATEMAX-1
	DrawImage animg,x,y,i
	x=x+PLATESIZE+1
	j=j+1
    If j Mod (340/PLATESIZE) = 0 Then 
		x=0
		y=y+PLATESIZE+1
	EndIf  
Next 
Flip
WaitKey
 |