Seite 2 von 2

Re: Canvas Gadget Resize mit Image ?

Verfasst: 06.07.2014 20:16
von Andreas21

Re: Canvas Gadget Resize mit Image ?

Verfasst: 06.07.2014 20:39
von NicTheQuick
Nein, das ist keine API. Vermutlich musst du nur einfach mal die neuste Version installieren.

Re: Canvas Gadget Resize mit Image ?

Verfasst: 07.07.2014 08:14
von silbersurfer
erstmal wieder ein Danke an Euch für die schnellen Hilfestellungen :allright:

der Link Andreas21 war genau richtig danke
Komisch nur das er noch nicht in der internen Hilfe drinne ist.

Jetzt klappt es wunderbar, und auch relative zügig danke NicTheQuick.
Allerdings ist da noch ein kleiner Wermutsropfen, beim Scrollen sieht man leichtes flackern der Ränder.

Scheint so als wird nicht sauber Aktualisiert, aber sonst läuft es jetzt schon mal schnell

Edit: So habe jetzt noch mal alles umgebaut,und auf den Rat von Bisonte bezüglich das Gadtget nicht mit zu Skalieren gehört
Nun gibt es kein Flackern und alles ist schnell Danke nochmal Jungs für eure Hilfe.....

hier nochmal der Testcode mit den Änderungen damit andere auch sehen was gemeint ist

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

Re: Canvas Gadget Resize mit Image ?

Verfasst: 08.07.2014 19:52
von mk-soft
ResizeImage liefert nur den Erfolg zurück. Ging somit nicht unter Mac.

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

Re: Canvas Gadget Resize mit Image ?

Verfasst: 09.07.2014 09:26
von silbersurfer
ResizeImage liefert nur den Erfolg zurück. Ging somit nicht unter Mac.
Das hatte mich anfangs auch in der Hilfe irritiert, so wie du das jetzt gemacht hast mk-soft finde Ich das auch viel Logischer.
Danke für den Tipp, bin ja auch noch ein Noob in PureBasic :lol:
werde deine änderung in mein Projekt übernehmen