AW: [FM] sanftes Scrollen in Scrollbox
4. Dez 2015, 11:22
Das Bild ist zentral ausgerichtet:Image.Align := Center
Angenommen, die Scrollbox ist 400x600 Pixel groß. Wenn ich ein Bild anzeige, dass 200x200 Pixel hat, dann wird es an Position 100,200 angezeigt, also genau in der Mitte.
Das Bild passe ich aber so in die Scrollbox ein, dass mindestens eine Ausdehnung voll genutzt wird, also im Beispiel auf 400x400 vergrößert -> Position 0,100.
Um das Bild weiter zu vergrößern (oder auch wieder zu verkleinern), behandle ich die 2-Finger Zoomgeste und vergrößere das Bild ausgehend vom Gestenmittelpunkt um den "Gestenfaktor". Wenn ich also an Bildpunkt 300,200 das Bild um Faktor 2 vergrößere, dann bleibt dieser Bildpunkt genau da, wo er ist und alle anderen Bildpunkte entfernen sich um Faktor 2. Das Bild wird 800x800 groß und der Gestenpunkt für das Bild liegt dann bei 600x400. In der Scrollbox muss dieser Punkt weiter bei 300x200 angezeigt werden, so dass das Bild an Position -300,-100 liegt. In der Scrollbox entspricht dies dem Punkt 300,300 (x-Achse: -300(Position) + 600(Bildgestenpunkt) = 300; y-Achse: -100(Position) + 400(Bildgestenpunkt)).
Wenn sich der Viewport der Scrollbox an Position 0,0 befindet, dann ist der Mittelpunkt des Bildes genau in der Mitte der Scrollbox. Bei obiger Konstellation befindet sich der Bildmittelpunkt (400,400) aber 100 Pixel zu weit links (-300(Bildposition) + 400(Bildmittelpunkt) - 200(ScrollboxMitte) = -100), so dass die ViewportPosition := 100,0 ist.
Wenn ich mit der Zoomgeste genau den Mittelpunkt treffe, dann habe ich deine Werte, gewöhnlich werden sie aber davon abweichen.
Mein Problem besteht jetzt darin, dass der Viewport nur Positionen zwischen 0,0 (Ursprung) und 200,100 (rechte untere Ecke) annehmen kann. Die oberen 100 und die linken 200 Pixel des Bildes bekomme ich also nicht mehr zu sehen.
quaero
|