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
|