Перетащите изображение в пределах родительской границы? - PullRequest
1 голос
/ 07 ноября 2010

Я создал элемент управления для просмотра изображений, который обеспечивает увеличение / уменьшение изображения, а когда изображение увеличивается и становится больше, чем его средство просмотра (вы не можете видеть все изображение), я предоставлял возможность перетаскивать изображение ( как Windows Photo Viewer ) с использованием «TranslateTransform», но я хочу, чтобы изображение перестало перетаскивать, когда появляется его граница (влево или вправо или влево или вниз), я сделал некоторые вычисления ширины и высоты четвертогосторон, и все работает нормально, но когда вы speedy перетаскиваете изображение, оно останавливается после , его граница проходит через границу контейнера , и расстояние увеличивается с большей скоростью перетаскивания.Например: откройте изображение в « Windows Photo Viewer » и увеличьте его, затем перетащите его, он остановится точно, когда вы достигнете его границы ».Граница появилась независимо от скорости перетаскивания?

Ценю вашу помощь, С наилучшими пожеланиями.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2010

Это мой код. У меня есть изображение (имя: imgView), сетка insode (имя: grdImage), я хочу, чтобы изображение (увеличенное изображение) перемещалось с помощью мыши, перемещалось внутрь сетки, и когда его границы достигали границы сетка до стоп , точно так же, как «Windows Photo Viewer» . К вашему сведению: я увеличил изображение с помощью scaleTransform:

Private Sub imgView_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    _IsMouseCapture = True
    imgView.CaptureMouse()
    Dim tt = DirectCast(DirectCast(imgView.RenderTransform, TransformGroup).Children.First(Function(tr) TypeOf tr Is TranslateTransform), TranslateTransform)
    start = e.GetPosition(grdImage)
    origin = New Point(tt.X, tt.Y)
End Sub

Private Sub imgView_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
    _IsMouseCapture = False
    imgView.ReleaseMouseCapture()
End Sub

 Private Sub imgView_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
    If (Not _IsMouseCapture) Then
        Return
    End If

    Dim tt = DirectCast(DirectCast(imgView.RenderTransform, TransformGroup).Children.First(Function(tr) TypeOf tr Is TranslateTransform), TranslateTransform)
    Dim vx As Double = start.X - e.GetSafePosition(grdImage).X
    Dim vy As Double = start.Y - e.GetSafePosition(grdImage).Y
    tt.Y = origin.Y - vy
    tt.X = origin.X - vx
End Sub`
0 голосов
/ 10 ноября 2010

Это похоже на проблему с вашим кодом. Можете ли вы просто применить проверку диапазона при вычислении параметров для преобразования преобразования, чтобы избежать движущегося изображения за пределами области?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...