在Wp7中滚动缩放图像时,宽高比会发生变化

时间:2011-05-06 06:40:27

标签: c# silverlight windows-phone-7 gesture

我在滚动查看器中有一个图像。图像上有插入和缩小功能。 但在滚动缩放图像时,宽高比会发生变化,图像会变形。 关注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 :(得分:0)

我认为这里的问题是你要为每个捏合手势改变 RenderTransformOrigin ,这会导致失真。我会尝试将 RenderTransformOrigin 固定为0.5,0.5,以确保获得均衡的比例。

我假设您正在移动原点以尝试放大/缩小用户已启动手势的图像部分。为实现这一目标,我认为您需要让用户在放大后平移图像。

另一点,比例因子始终相同,因此您只需计算一次,然后将其分配给 ScaleX ScaleY