Seite 1 von 1
Zentrierter Zoom "Erledigt !"
Verfasst: 17.11.2014 15:37
von silbersurfer
Hallo liebe Community,
Wie der Titel schon sagt suche nach einer möglichkeit, anhand der Slider Positionen einen Zentrierten Zoom
zu ermöglichen siehe Skizze

nur leider sehe Ich den Wald vor lauter Bäumen nicht
Mein Ansatz war Sliderposition + ((reale größe-Sichtbarer Bereich)/2)
aber leider ist das nicht koreckt kann mir da vieleicht einer auf die sprünge helfen
gruss Silbersurfer
Re: Zentrierter Zoom
Verfasst: 17.11.2014 22:54
von STARGÅTE
Auch wenn du n Skizze gemacht hast, ist mir nicht ganz klar, was du haben möchtest.
+Sliderposition? Was für ein Wertebereich?
Re: Zentrierter Zoom
Verfasst: 18.11.2014 00:14
von silbersurfer
was Ich damit meine STARGÅTE ist, eine Image datei die z.b. in einen Imagegadget geladen wurde und mit hilfe von Slidern gescrollt werden kann,
ähnlich wie bei Infra View einen Picture Viewer. Nun möchte Ich das Image vergrößern ab der von mir gescrollten Position wie oben in der Skizze zu sehen ist
also den im Imagegadget sichtbaren bereich.
die Sliderposition ist in meinen fall ja die anzahl der gescrollten Pixel von Image
Ich Grab ja den sichtbaren bereich aus dem geladen Image und übergebe dem Imagegadget dann das bild
Code: Alles auswählen
Procedure Im_UpdateImageGadget (*this.GadgetImage)
With *this
If IsImage(\Image\Image)
If IsImage(\QuellImage)<>0 And \SliderH\Slider<>-1 And \SliderV\Slider<>-1
FreeImage(\Image\Image)
; Slider neu anpassen an dem QuellImage
Im_SetSliderValue(\SliderH,ImageWidth(\QuellImage)*\factor,\Image\Width)
Im_SetSliderValue(\SliderV,ImageHeight(\QuellImage)*\factor,\Image\Hight)
;Position auf neu angepasten Slider setzen
SetGadgetState(\SliderH\Slider,\SliderH\Pos)
SetGadgetState(\SliderV\Slider,\SliderV\Pos)
;Position wieder Speichern
\SliderH\Pos=GetGadgetState(\SliderH\Slider)
\SliderV\Pos=GetGadgetState(\SliderV\Slider)
; Gadget Image vom QuellImage Grabben und Speichern
\Image\Image=GrabImage(\QuellImage,#PB_Any,\SliderH\Pos/\factor,\SliderV\Pos/\factor,\Width/\factor,\Hight/\factor)
;Anpassen an das ImageGadget
ResizeImage(\Image\Image,\Width,\Hight,#PB_Image_Raw)
;deactivieren der Slider wenn QuellImage< oder = Groß wie Imagegadget ist
If ImageWidth(\QuellImage)*\factor<=\Image\Width
DisableGadget(\SliderH\Slider,1)
EndIf
If ImageHeight(\QuellImage)*\factor<=\Image\Hight
DisableGadget(\SliderV\Slider,1)
EndIf
Else
;deactivieren der Slider wenn kein QuellImage existiert
If \SliderH\Slider<>0 Or \SliderV\Slider<>0
DisableGadget(\SliderH\Slider,1)
DisableGadget(\SliderV\Slider,1)
EndIf
EndIf
;ausgeben an das ImageGadget
SetGadgetState(\Gadget, ImageID(\Image\Image))
EndIf
EndWith
EndProcedure
Ich hoffe das es nun verständlicher ist
gruss Silbersurfer
Re: Zentrierter Zoom
Verfasst: 18.11.2014 00:38
von STARGÅTE
Hm, aber das verwirrt mich:
Code: Alles auswählen
Im_SetSliderValue(\SliderH,ImageWidth(\QuellImage)*\factor,\Image\Width)
Eigentlich brauch der Slider nicht die komplette Breite des Bilds, denn dann würde das Bild nach "rauswandern" wenn ich ganz nach rechts scrolle. Hier müsste also die größe des sichbaren Bereichs abgezogen werden.
Ansonsten würde ich halt sagen: Sliderposition = (Sliderposition+SichbarerBereich/2) / alterFaktor * neuerFaktor - SichbarerBereich/2
Re: Zentrierter Zoom
Verfasst: 18.11.2014 01:07
von silbersurfer
Ja Super..... Danke STARGÅTE genau das ist es was ich gemeint habe
Ich war ja fast dran nur den Factor hatte ich ausser acht gelassen
Mein Ansatz war Sliderposition + ((reale größe-Sichtbarer Bereich)/2)
Jetzt Läuft es wie gewollt
Stargate schrieb
Hm, aber das verwirrt mich:
Eigentlich brauch der Slider nicht die komplette Breite des Bilds
die Procedure
Im_SetSliderValue macht auch genau was du sagst. Sie berechnt lediglich das verhältnis vom sichtbaren bereich zum realen
gruss Silbersurfer