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

本文关键字:高比会 变化 Wp7 滚动 放大 图像 | 更新日期: 2023-09-27 17:54:58

我在滚动查看器中有一个图像。该图像具有在其上实现的捏进和捏出功能。但是,当滚动缩放图像时,宽高比发生变化,图像变得扭曲。在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);
    }

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

我认为这里的问题是,你正在改变RenderTransformOrigin为每个捏手势,这是导致失真。我会尝试离开RenderTransformOrigin固定在0.5,0.5,以确保你得到一个均匀的比例。

我假设你正在移动原点,试图放大/缩小用户开始手势的图像部分。为了实现这一点,我认为你需要让用户在放大后可以移动图像。

还有一点,比例因子总是相同的,所以你应该只计算一次,然后将它分配给ScaleXScaleY