Re: Canvas Gadget Resize mit Image ?
Verfasst: 06.07.2014 20:16
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
;Globale Variabeln
Global MImage=CreateImage(#PB_Any, 1024, 768,32)
Global CanvasZoom=1,Canvas,SliderH,SliderV
;zufalls Grafik erstellen
If StartDrawing(ImageOutput(MImage))
For t= 0 To 50
Circle(Random(1024),Random(768), Random(30), RGB(Random(255), Random(255), Random(255)))
Next
StopDrawing()
EndIf
;Fenster und deren Gadgets erstellen
If OpenWindow(0, 0 , 0, 1024, 768, "Scale Image Test !",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Canvas=CanvasGadget(#PB_Any, 0, 0, WindowWidth(0)-24, WindowHeight(0)-24,#PB_Canvas_Border)
SetGadgetAttribute(Canvas,#PB_Canvas_Image ,ImageID(Mimage))
SliderH=ScrollBarGadget(#PB_Any, 0,WindowHeight(0)-22, WindowWidth(0)-24, 20, 0, ImageWidth(MImage),GadgetWidth(Canvas))
SliderV=ScrollBarGadget(#PB_Any, WindowWidth(0)-22,0, 20,WindowHeight(0)-24, 0, ImageHeight(MImage),GadgetHeight(Canvas),#PB_ScrollBar_Vertical)
EndIf
;fügt tastaturabfrage für + und - vom Zifferblock hinzu
AddKeyboardShortcut(0,#PB_Shortcut_Add,1000)
AddKeyboardShortcut(0,#PB_Shortcut_Subtract,1001)
;Skalieren des Image und den Canvas übergeben
Procedure ScaleImage(id,factor=1)
Protected x,y,w=ImageWidth(id),h=ImageHeight(id),datei
SetGadgetAttribute(SliderH,#PB_ScrollBar_Maximum,ImageWidth(id)*CanvasZoom)
SetGadgetAttribute(SliderV,#PB_ScrollBar_Maximum,ImageHeight(id)*CanvasZoom)
x=GetGadgetState(SliderH) : y=GetGadgetState(SliderV)
Static BackupImage
If BackupImage<>0
FreeImage(BackupImage)
EndIf
BackupImage = GrabImage(id, #PB_Any, x/factor, y/factor, w/factor, h/factor)
Datei=ResizeImage(BackupImage,w,h,#PB_Image_Raw)
SetGadgetAttribute(Canvas,#PB_Canvas_Image ,Datei)
EndProcedure
; Echtzeitabfrage für die ScrollbarGadgets
Procedure SliderHandler()
Select EventGadget()
Case SliderH
;Debug GetGadgetState(SliderH)
ScaleImage(MImage,CanvasZoom)
Case SliderV
;Debug GetGadgetState(SliderV)
ScaleImage(MImage,CanvasZoom)
EndSelect
EndProcedure
BindGadgetEvent(SliderH, @SliderHandler())
BindGadgetEvent(SliderV, @SliderHandler())
;Hauptschleife
Repeat
event=WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
quit=1
Case #PB_Event_Menu
Select EventMenu()
Case 1000 ;Plus
CanvasZoom=CanvasZoom+1
ScaleImage(MImage,CanvasZoom)
Case 1001 ;Minus
If CanvasZoom>1
CanvasZoom=CanvasZoom-1
ScaleImage(MImage,CanvasZoom)
EndIf
EndSelect
EndSelect
Until Quit=1
Code: Alles auswählen
;Skalieren des Image und den Canvas übergeben
Procedure ScaleImage(id,factor=1)
Protected x,y,w=ImageWidth(id),h=ImageHeight(id),datei
SetGadgetAttribute(SliderH,#PB_ScrollBar_Maximum,ImageWidth(id)*CanvasZoom)
SetGadgetAttribute(SliderV,#PB_ScrollBar_Maximum,ImageHeight(id)*CanvasZoom)
x=GetGadgetState(SliderH) : y=GetGadgetState(SliderV)
Static BackupImage
If BackupImage<>0
FreeImage(BackupImage)
EndIf
BackupImage = GrabImage(id, #PB_Any, x/factor, y/factor, w/factor, h/factor)
If ResizeImage(BackupImage,w,h,#PB_Image_Raw)
SetGadgetAttribute(Canvas,#PB_Canvas_Image ,ImageID(BackupImage))
EndIf
EndProcedure
Das hatte mich anfangs auch in der Hilfe irritiert, so wie du das jetzt gemacht hast mk-soft finde Ich das auch viel Logischer.ResizeImage liefert nur den Erfolg zurück. Ging somit nicht unter Mac.