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
Bild
nur leider sehe Ich den Wald vor lauter Bäumen nicht :oops:
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 :allright:
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