Zoom mit Mittenjustierung

Variablen

wvpBreite des ViewportshvpHöhe des Viewports
wi1Breite des Image (vorher)hi1Höhe des Image (vorher)
wi2Breite des Image (nachher)hi2Höhe des Image (nachher)
offsx1Offset des linken Randes (Image → Viewport, vorher)offsy1Offset des oberen Randes (Image → Viewport, vorher)
offsx2Offset des linken Randes (Image → Viewport, nachher)offsy2Offset des oberen Randes (Image → Viewport, nachher)
xpTeilungsverhältnis im Image (X-Achse)

Idee

Das Teilungsverhältnis xp entlang der X-Achse, bezogen auf die
Mitte des Viewports, muss beim Zoomen konstant bleiben.

Rechnung

Rechnung beispielhaft anhand der X-Achse:

xp = (wvp / 2 - offsx1) / wi1
xp = (wvp / 2 - offsx2) / wi2

daraus folgt

(wvp / 2 - offsx1) / wi1 = (wvp / 2 - offsx2) / wi2

Gesucht ist der Offset nach dem Zoomen

offsx2 = - ((wi2 – wi1) * wvp / 2 – wi2 * offsx1) / wi1

Für die Y-Achse ergibt sich entsprechend

offsy2 = - ((hi2 - hi1) * hvp / 2 - hi2 * offsy1) / hi1