我在滚动查看器中有一个图像。图像上有插入和缩小功能。 但在滚动缩放图像时,宽高比会发生变化,图像会变形。 关注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);
}
答案 0 :(得分:0)
我认为这里的问题是你要为每个捏合手势改变 RenderTransformOrigin ,这会导致失真。我会尝试将 RenderTransformOrigin 固定为0.5,0.5,以确保获得均衡的比例。
我假设您正在移动原点以尝试放大/缩小用户已启动手势的图像部分。为实现这一目标,我认为您需要让用户在放大后平移图像。
另一点,比例因子始终相同,因此您只需计算一次,然后将其分配给 ScaleX 和 ScaleY 。