【问题标题】:Zoom In on Canvas - C#放大画布 - C#
【发布时间】:2014-12-29 02:47:19
【问题描述】:
我目前有一个画布,可以在我的程序中加载图像,我希望能够右键单击该图像上的某个点,然后单击放大以放大该点。
我找到的一个解决方案是:
<Canvas>
<Canvas.RenderTransform>
<ScaleTransform ScaleX="2" ScaleY="2">
</Canvas.RenderTransform>
</Canvas>
这可行,但它不会放大到特定坐标,而只是放大到图像的左上角。我将如何实现坐标缩放?放大特定坐标?
【问题讨论】:
标签:
c#
image
canvas
zooming
【解决方案1】:
使用三个单独的转换。一是移动画布,使点击点为原点。第二个变换为缩放,第三个变换再次将点击点放回中心
<Canvas.RenderTransform>
<TransformGroup>
<TranslateTransform X="0" Y="0" />
<ScaleTransform ScaleX="1" ScaleY="1" />
<TranslateTransform X="0" Y="0" />
</TransformGroup>
</Canvas.RenderTransform>
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
Point p = e.GetPosition(this);
var transformGroup = ImageCanvas.RenderTransform as TransformGroup;
var moveToOriginTransform = transformGroup.Children[0] as TranslateTransform;
var scaleTransform = transformGroup.Children[1] as ScaleTransform;
var moveBackTransform = transformGroup.Children[2] as TranslateTransform;
moveToOriginTransform.X = -p.X;
moveToOriginTransform.Y = -p.Y;
scaleTransform.ScaleX += 1;
scaleTransform.ScaleY += 1;
moveBackTransform.X = p.X;
moveBackTransform.Y = p.Y;
}