【问题标题】: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;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2016-11-15
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多