2009-04-22 7 views
0

En réponse à this question sur le zoom et le panoramique dans WPF, j'ai suggéré d'utiliser une ScaleTransform et de mettre à jour l'origine RenderTransform dans l'événement MouseMove. Cela fonctionne mais je ne suis pas content du fait que le mouvement de panoramique ne correspond pas tout à fait à la souris. Je peux voir quel est le problème avec cet algorithme, mais la mise en œuvre correcte continue de m'échapper.Quel est le problème avec cet algorithme de panoramique d'image?

private void image_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (image.IsMouseCaptured) 
    { 
     Vector v = start - e.GetPosition(image); 
     // this calculates the deltas relative to the original size of the image 
     // but does not take into account the transformed size, but transforming the 
     // size like image.ActualWidth * scaleTransform.ScaleX does not help 
     double deltax = v.X/image.ActualWidth; 
     double deltay = v.Y/image.ActualHeight; 

     image.RenderTransformOrigin = new Point(orgin.X + deltax, orgin.Y + deltay); 
    } 
} 

Des idées sur comment je peux faire fonctionner cette approche?

Répondre

1

Il est assez étrange que cela ne fonctionne pas pour vous. J'utilise une manière similaire de faire le panoramique. Mais je faire diviser le delta par scaleTransform.ScaleX.

L'autre différence est que j'ajoute un TranslateTransform au TransformGroup et modifie X et Y de la traduction au lieu d'utiliser RenderTransformOrigin.

+0

Merci pour le pointeur, j'aurais dû utiliser un TraslateTransform depuis le début, mais j'essayais de tout faire en utilisant simplement un ScaleTransform, j'ai mis à jour la réponse à la question originale en utilisant votre suggestion. Merci. –

Questions connexes