【问题标题】:MatrixTransform rotate then translate image in xamlMatrixTransform 旋转然后在 xaml 中翻译图像
【发布时间】:2016-01-07 09:52:05
【问题描述】:

我正在尝试使用简单的 Matrix.translate 和 Matrix.rotate 方法旋转然后翻译图像,但是由于某种原因,当它旋转 90º 或 270º 时,如果我尝试将其平移一英寸,它就会失去控制并远离中心。如果它是 180º,它会朝相反的方向射出。

图片的xaml是这样的:

<Border x:Name="Border" Grid.Row="0" MinHeight="100" MinWidth="100" VerticalAlignment="Center" HorizontalAlignment="Center" ClipToBounds="True"  BorderBrush="Black" BorderThickness="1" >
     <Image x:Name="imgImagem" MaxHeight="550" MaxWidth="950"
          Margin="10,10,10,10"  MouseWheel="imgImagem_MouseWheel"
          MouseLeftButtonDown="imgImagem_MouseLeftButtonDown" 
      />    
</Border>

对于旋转:

Private Sub imgImagem_MouseRightButtonDown(sender As Object, e As MouseButtonEventArgs) Handles imgImagem.MouseRightButtonDown
        Dim m As Matrix = imgImagem.RenderTransform.Value
        m.RotateAt(90, imgImagem.ActualWidth / 2, imgImagem.ActualHeight / 2)
        imgImagem.RenderTransform = New MatrixTransform(m)
End Sub

对于翻译:

    Private Sub imgImagem_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)

        If imgImagem.IsMouseCaptured Then
            Return
        End If
        imgImagem.CaptureMouse()
        start = e.GetPosition(imgImagem)
        origin.X = imgImagem.RenderTransform.Value.OffsetX
        origin.Y = imgImagem.RenderTransform.Value.OffsetY

    End Sub

    Private Sub imgImagem_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles imgImagem.MouseLeftButtonUp
        imgImagem.ReleaseMouseCapture()
    End Sub

    Private Sub imgImagem_MouseMove(sender As Object, e As Input.MouseEventArgs) Handles imgImagem.MouseMove
        Dim m As Matrix = imgImagem.RenderTransform.Value

        If Not imgImagem.IsMouseCaptured Then
            Return
        End If
        Dim p As Point = e.MouseDevice.GetPosition(imgImagem)
        m.Translate((p.X - start.X), (p.Y - start.Y))

        imgImagem.RenderTransform = New MatrixTransform(m)
    End Sub

关于是什么导致它出现这种行为的任何线索,或者我做错了什么让它呈现这种行为?

【问题讨论】:

  • 发现问题,只需要根据角度区分翻译。

标签: wpf vb.net xaml rotation matrix-transform


【解决方案1】:

只需像这样根据角度来区分平移:

        x = p.X - start.X
        y = p.Y - start.Y

        Select Case angulo
            Case 0
                m.Translate(x, y)
            Case 90
                m.Translate(-y, x)
            Case 180
                m.Translate(-x, -y)
            Case 270
                m.Translate(y, -x)
        End Select

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2012-04-19
    • 2014-03-23
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多