Probleme beim Redraw mit ImageGadget und Fensterhintergrund
Verfasst: 02.11.2004 12:08
Moin! Ich habe folgendes Problem:
Ich habe ein Fenster mit weißem Hintergrund. Darauf zappeln ein paar ImageGadget herum. Wird das Fenster vergrößert oder verkleinert, werden diese ImageGadgets vom Programm hinsichtlich Größe und Position angepasst. Nur je nachdem wie hektisch ich das Fenster ziehe, bleiben irgendwelche Artefakte zurück, d.h. der Fensterhintergrund wird nicht sauber neu gezeichnet.
Ich mache jetzt schon zwei Tage dran rum, habe alle möglichen Sachen ausprobiert, aber ich komme einfach nicht weiter. Ich habe mal ein einfaches Beispiel zum rumprobieren zusammengecodet, baut 6 ImageGadgets auf, deren Bilder alle Sekunde getauscht werden oder auch nicht. Kann sich das bitte mal jemand anschauen? Hinweis: anstelle meiner JPGs einfach irgendwelche JPGs nehmen, werden automatisch skaliert.
Danke!
Ich habe ein Fenster mit weißem Hintergrund. Darauf zappeln ein paar ImageGadget herum. Wird das Fenster vergrößert oder verkleinert, werden diese ImageGadgets vom Programm hinsichtlich Größe und Position angepasst. Nur je nachdem wie hektisch ich das Fenster ziehe, bleiben irgendwelche Artefakte zurück, d.h. der Fensterhintergrund wird nicht sauber neu gezeichnet.
Ich mache jetzt schon zwei Tage dran rum, habe alle möglichen Sachen ausprobiert, aber ich komme einfach nicht weiter. Ich habe mal ein einfaches Beispiel zum rumprobieren zusammengecodet, baut 6 ImageGadgets auf, deren Bilder alle Sekunde getauscht werden oder auch nicht. Kann sich das bitte mal jemand anschauen? Hinweis: anstelle meiner JPGs einfach irgendwelche JPGs nehmen, werden automatisch skaliert.
Danke!
Code: Alles auswählen
; ImageGadget/Resize-Test
#init_window_xsize = 390
#init_window_ysize = 175
Global window_xsize.l, old_x.l
Global window_ysize.l, old_y.l
Global icon_xsize.l
Global icon_space.l
Global icon_ysize.l
Dim xpos.l(7)
Global ypos.l
UseJPEGImageDecoder()
Global Image0
Global Image1
Image0 = CatchImage(1, ?Image0)
Image1 = CatchImage(2, ?Image1)
DataSection
Image0:
IncludeBinary "eins.jpg"
Image1:
IncludeBinary "zwei.jpg"
EndDataSection
Procedure sizing()
icon_xsize = window_xsize/7.5
icon_space = icon_xsize/2
icon_ysize = (window_ysize - 2.5*icon_space)/4
xpos(1) = icon_space/2
xpos(2) = xpos(1) + icon_xsize
xpos(3) = xpos(2) + icon_xsize + icon_space
xpos(4) = xpos(3) + icon_xsize
xpos(5) = xpos(4) + icon_xsize + icon_space
xpos(6) = xpos(5) + icon_xsize
ypos = icon_space/2
; Image0 = CatchImage(1, ?Image0)
Image0 = ResizeImage(1, icon_xsize, icon_ysize)
; Image1 = CatchImage(2, ?Image1)
Image1 = ResizeImage(2, icon_xsize, icon_ysize)
StartDrawing(WindowOutput())
Box(0, 0, window_xsize, window_ysize ,RGB(255,255,255))
StopDrawing()
For x = 1 To 6
ResizeGadget(10+x, xpos(x), ypos, icon_xsize, icon_ysize)
Next
EndProcedure
Procedure DrawBit( pos.b )
If Random(1) = 1
SetGadgetState(10 + pos, Image1)
Else
SetGadgetState(10 + pos, Image0)
EndIf
EndProcedure
Procedure DrawImages()
window_xsize = WindowWidth()
window_ysize = WindowHeight()
If window_xsize <> old_x Or window_ysize <> old_y
sizing()
old_x = window_xsize
old_y = window_ysize
EndIf
For x = 1 To 6
DrawBit( x )
Next
EndProcedure
Procedure Open_Window()
If OpenWindow(1, 275, 189, window_xsize, window_ysize, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Test")
If CreateGadgetList(WindowID())
For x = 1 To 6
ImageGadget(10+x, 0, 0, 0, 0, Image0)
Next
EndIf
StartDrawing(WindowOutput())
Box(0, 0, window_xsize, window_ysize ,RGB(255,255,255))
StopDrawing()
EndIf
EndProcedure
; Start Main
window_xsize = #init_window_xsize
window_ysize = #init_window_ysize
old_x = 0
old_y = 0
Open_Window()
sizing()
StartTimer(0, 1000, @DrawImages() )
Repeat
Event = WaitWindowEvent()
Debug event
Until Event = #PB_EventCloseWindow
End