midhandle images & scale
Monkey Forums/Monkey Programming/midhandle images & scale
| ||
| In Blitz Max if you use midhandle on an image and then use Scale the image will scale from the middle outwards (grows in all four directions), in Monkey a midhandled image will still scale from the top left (grows to the right and down). Is this by design or a bug? Here's some code.
Import mojo
Import monkey
Global img_but:Image
Global Width:Int
Global Height:Int
Global X:Int
Global Y:Int
Global Size:Float
'... Main Function
Function Main:Int() ; New MyApp ; End
'... Main Class
Class MyApp Extends App
Method OnCreate()
SetUpdateRate 60
img_but = LoadImage("quit.png",1,img_but.MidHandle)
Width = img_but.Width
Height = img_but.Height
X = 100
Y = 100
Size = 1.0
End
Method OnUpdate()
Local Mx:Int = MouseX() + Width/2
Local My:Int = MouseY() + Height/2
If Mx > X And Mx < Width + X And My > Y And My < Height + Y
Size = Size + 0.025
If Size > 1.2 Then Size = 1.2
Else
Size = Size - 0.025
If Size <= 1.0 Then Size = 1.0
Endif
End
Method OnRender()
Cls
Scale Size , Size
DrawImage img_but , X , Y
Scale 1.0 , 1.0
End
End
|
| ||
| With the Scale, Rotate and Translate Commands you act on the total canvas and not the image. |
| ||
I haven't tried your code but I'm pretty sure the line
img_but = LoadImage("quit.png",1,img_but.MidHandle)
should be
img_but = LoadImage("quit.png",1, Image.MidHandle)
That is to say not your object "img_but" but the Const within the class Image of which your object "img_but" is a instance of. Horrible explantion. Make sense? |
| ||
| There is a variation of Drawimage that uses its own scale and rotation parameters. |
| ||
| The MidHandle in Monkey works perfectly. But as Mike says there's a Draw method for scaling and rotating. That said - you still need to correctly set the Position (MidHandle) if you want to rotate about centre. You can do it at Load or you can do it with the image. In this case your object - img_but.SetHandle(...) |
| ||
| Thanks for the quick answers guys, didn't realise there were two different DrawImage commands - applying my Scale to the alternative solved the issue. Seems either;
img_but = LoadImage("quit.png",1,img_but.MidHandle)
img_but = LoadImage("quit.png",1,Image.MidHandle)
Works.. but
img_but = LoadImage("quit.png")
img_but.MidHandle
Does not work? Throws an error. But I guess img_but.SetHandle(Width/2,Height/2) will work. |
| ||
img_but.MidHandle It is just a constant value. Have a look at the image class of mojo. If you want to set the handle after you have loaded the image, you have to do it with SetHandle. |
| ||
Or you can use this function:Function MidHandle:Void( image:Image ) image.SetHandle( Floor(image.Width() * 0.5), Floor(image.Height() * 0.5) ) End |