Соотношение сторон изменяется при прокрутке увеличенного изображения в Wp7 - PullRequest
0 голосов
/ 06 мая 2011

У меня есть изображение в scrollviewer. На изображении реализована функция Pinch in and out.Но при прокрутке увеличенного изображения изменяется соотношение сторон, и изображения искажаются.После xaml:

 <ScrollViewer HorizontalScrollBarVisibility="Auto"  VerticalScrollBarVisibility="Auto" Name="scroller" >
            <Image  Name="image_new"   Visibility="Visible"    CacheMode="BitmapCache"   >
                <Image.RenderTransform >
                <CompositeTransform x:Name="transform"/>
                </Image.RenderTransform >
                <toolkit:GestureService.GestureListener>
                    <toolkit:GestureListener  Flick="OnFlick" PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta"  DoubleTap="Onimage_doubletap" Tap="Onimage_singletap" />

                </toolkit:GestureService.GestureListener>

            </Image>
        </ScrollViewer>

И в файле .cs методы:

  private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
    {

        Point point0 = e.GetPosition(image_new, 0);
        Point point1 = e.GetPosition(image_new, 1);
        Point midpoint = new Point((point0.X + point1.X) / 2, (point0.Y + point1.Y) / 2);
        image_new.RenderTransformOrigin = new Point(midpoint.X / image_new.ActualWidth, midpoint.Y / image_new.ActualHeight);
        initialScale = transform.ScaleX;

    }

    private void OnPinchDelta(object sender, PinchGestureEventArgs e)
    {

        transform.ScaleX = Math.Max(Math.Min(initialScale * e.DistanceRatio, 3.0), 0.5);
        transform.ScaleY = Math.Max(Math.Min(initialScale * e.DistanceRatio, 3.0), 0.5);

    }

1 Ответ

0 голосов
/ 06 мая 2011

Я думаю, что проблема в том, что вы меняете RenderTransformOrigin для каждого жеста повышения, что приводит к искажению.Я бы попытался оставить RenderTransformOrigin с фиксированным значением 0,5,0,5, чтобы обеспечить равномерный масштаб.

Я предполагаю, что вы перемещали источник, чтобы попытаться увеличить или уменьшить частьизображение, с которого пользователь начал жест.Я думаю, что для достижения этого вам нужно будет разрешить пользователю перемещаться по изображению после увеличения.

Еще одна точка, масштабный коэффициент всегда один и тот же, поэтому вы должны просто рассчитать его один раз, а затемназначьте его как ScaleX и ScaleY .

...