2009-04-22 18 views
0

WPF에서 확대/축소 및 패닝에 대한 this question에 대한 응답으로 ScaleTransform을 사용하고 MouseMove 이벤트에서 RenderTransform 원점을 업데이트하라는 제안을했습니다. 이것은 작동하지만 패닝 동작이 마우스와 정확히 일치하지 않는다는 사실에 만족하지 않습니다. 이 알고리즘의 문제점은 무엇인지 알 수 있지만 올바른 구현은 계속해서 나를 피할 수 있습니다.이미지 패닝 알고리즘의 문제점은 무엇입니까?

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); 
    } 
} 

어떻게하면이 접근 방식을 사용할 수 있습니까?

답변

1

그것은 당신을 위해 작동하지 않는 것이 이상합니다. 비슷한 방법으로 패닝 작업을하고 있습니다. 하지만 난 do은 scaleTransform.ScaleX로 델타를 나눕니다.

다른 점은 TranslateTransform을 TransformGroup에 추가하고 RenderTransformOrigin을 사용하는 대신 변환의 X와 Y를 수정한다는 것입니다.

+0

포인터를 주셔서 감사합니다. Begin의 TraslateTransform을 사용해야했지만 ScaleTransform을 사용하여이 모든 작업을 수행하려고 했으므로 제안 사항을 사용하여 원래 질문에 대한 답변을 업데이트했습니다. 감사. –