在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);
}
我认为这里的问题是,你正在改变RenderTransformOrigin为每个捏手势,这是导致失真。我会尝试离开RenderTransformOrigin固定在0.5,0.5,以确保你得到一个均匀的比例。
我假设你正在移动原点,试图放大/缩小用户开始手势的图像部分。为了实现这一点,我认为你需要让用户在放大后可以移动图像。
还有一点,比例因子总是相同的,所以你应该只计算一次,然后将它分配给ScaleX和ScaleY。