2010-02-18 6 views
0

Existe-t-il un moyen d'effectuer un zoom fixe sur une image multi-échelle en zoom profond? c'est-à-dire que vous cliquez une fois pour zoomer sur le point X, Y sur 2x, cliquez à nouveau pour restaurer la position d'origine et le niveau de zoom. J'ai écrit le code pour zoomer et dézoomer, mais l'appel de zoomaboutlogicalpoint au milieu du processus de zoom entraîne un zoom arrière trop important (je suppose que le facteur 1/2 dans l'événement de la souris augmente - puis-je obtenir le niveau de zoom ?). Aussi j'aimerais que l'image agrandie soit centrale (je devine que je change le point pour zoomer à mi-chemin dans l'image mais ceci ne semble pas fonctionner, peut-être que je dois factoriser dans la position ViewPort?)Correction du zoom profond

par exemple.

private void msi_MouseLeftButtonDown (expéditeur d'objet, MouseButtonEventArgs e) {
point p = e.GetPosition (.msi); Zoom (2, p); }

private void msi_MouseLeftButtonUp (expéditeur d'objet, MouseButtonEventArgs e) {
point p = e.GetPosition (.msi); Zoom (1/2, p); }

public void Zoom(double zoom, Point pointToZoom) 
    { 
     bool zoomingIn = zoom > 1; 
     bool zoomingOut = zoom < 1; 
     double minViewportWidth = 0.05; 
     double maxViewportWidth = 1; 

     if (msi.ViewportWidth < minViewportWidth && zoomingIn) 
     { 
      return; 
     } 

     if (msi.ViewportWidth > maxViewportWidth && zoomingOut) 
     { 
      return; 
     } 

     Point logicalPoint = this.msi.ElementToLogicalPoint(pointToZoom); 
     this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y); 

    } 

Merci.

Répondre

0

Remise à zéro du transform origine avant un zoom arrière semble avoir fait le tour:

msi.RenderTransformOrigin = new Point (msi.Height/2, msi.Width/2);

Questions connexes