fix muh drawimage code plz

BlitzMax Forums/BlitzMax Beginners Area/fix muh drawimage code plz

meems(Posted 2016) [#1]
blitzmax meganoob here. Still write in blitzplus style.

so the problem is :
It works for about 2 seconds, then the screen freezes. Its like windows wants to pol it, can't, so decides the program has stalled.
If the main loop variable i is reduced below 500, then the problem vanishes.

thx



Graphics 1280,1024

a:TImage=LoadImage("image.jpg")    ' put in your own image here

showslide(a,1.5,0.0003)

EndGraphics() 
End



Function showslide(image:TImage,zoom:Float,zoom_acl:Float)

SetImageHandle (image,ImageWidth(image)/2,ImageHeight(image)/2)

For i=0 To 2000

' zoom=zoom+zoom_acl
' zoom_acl=zoom_acl*0.999
' SetScale zoom,zoom

 Cls
 DrawImage image,0,0
 Flip
Next

End Function




Floyd(Posted 2016) [#2]
Does exactly what it should do here. My monitor runs at about 60 frames per second. So I see an unchanging image for a little over half a minute and then the program ends.


meems(Posted 2016) [#3]
looks more likely its my windows config then, which was my original suspicion. Any windows experts here? How do I tell windows not to worry? Maybe some harmless command that pings windows.


meems(Posted 2016) [#4]
fixed.
included a createtimer, and waittimer in the loop, which gives windows time to ping the program.

They don't tell you stuff like that in the tutorials. Have to learn 1st hand.


Henri(Posted 2016) [#5]
Hi,

you can use Pollsystem() also.

-Henri


TomToad(Posted 2016) [#6]
put If KeyHit(KEY_ESCAPE) Then Return after the For statement. This will poll the event queue every loop and keep it from getting backed up. It will also give you the ability to exit the slide if you don't want to wait for the time to expire.


coffeedotbean(Posted 2016) [#7]
Is there a reason it's done like this?

This is how I would do it (untested)

Graphics 1280,1024,0,60 '// Window mode @ 60 hertz/fps

'// Slide values
Global slideZoom:Float
Global slideAcl:Float
Global slideTime:Int
Global slideImg:TImage

'// Slides
Global slide1:TImage=LoadImage("image1.jpg")
Global slide2:TImage=LoadImage("image2.jpg")

'-------------------------------------------------
' Main loop
'-------------------------------------------------
While Not ApptTerminate()
	Cls

		If keyhit(KEY_1) Then PrepareSlide(slide1,2000) '// Zoom, this time 2 seconds and show slide1
		If keyhit(KEY_2) Then PrepareSlide(slide2,5000) '// Zoom, this time 5 seconds and show slide2
		UpdateSlide()
		DrawText "main loop keeps running while zooming see time inc - "+Millisecs(),0,0
	Flip
	If keyhit(KEY_ESC) Then Exit
Wend
Print "Program was closed with Esc key or [x]"

'-------------------------------------------------
'Functions 
'-------------------------------------------------
Function PrepareSlide(image:TImage,displaytime:Int)
	slideTime = displaytime+Millisecs()
	slideZoom = 0
	slideAcl = 0
	slideImg = image
	SetImageHandle (slideImg,ImageWidth(slideImg)/2,ImageHeight(slideImg)/2)
End Function

Function UpdateSlide()
	if slideTime < Millisecs() then Return 0 '// dont update or show slide if slidetime has expired
	slideZoom=slideZoom+slideAcl
	slideAcl=slideAcl*0.999
	SetScale slideZoom,slideZoom
	DrawImage image,0,0
	SetScale 1.0,1.0 '// reset the scale
End Function



meems(Posted 2016) [#8]
Hi all, I fell asleep for 2 hrs just woke up, thanks for le epic help. Still looks like new blitzmax users can expect to be well supported from these forums after 11-12 years.

@coffee
Nice code, I notice you use 2 images. My plan is to try have different images transition by crossfade, like they do in screensavers.