Comunidad, necesito ayuda con un programa, tengo una interfaz para tomar una foto y la guarda en un picture box, el detalle es que no encuentro algún código para mover la foto dentro de este pciture box, ya que es para una credencial y la foto original sale mas grande, algo como la función que tiene Facebook al cambiar una imagen y te permite mover la ubicación de la misma en un cierto espacio.
Bueno, con el siguiente ejemplo que he desarrollado ya deberías tener por donde continuarlo para satisfacer tus requisitos:
(https://i.imgur.com/ALRDUhP.gif)
Public Class PictureBoxEx : Inherits PictureBox
Protected isMoving As Boolean ' Flag that determine whether the image is moving.
Protected ptStart As Point ' Point where image moving starts.
Protected ptMove As Point ' Point where image moving is at.
Protected ptEnd As Point ' Point where image moving ends.
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
If (e.Button = MouseButtons.Left) Then
Me.ptStart = New Point(e.X, e.Y)
Me.isMoving = True
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
Me.Update()
Me.isMoving = False
Me.ptEnd = Me.ptMove
MyBase.OnMouseUp(e)
End Sub
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
If (Me.isMoving) AndAlso (Me.Image IsNot Nothing) Then
Me.ptMove = New Point(Me.ptEnd.X + (e.X - Me.ptStart.X), Me.ptEnd.Y + (e.Y - Me.ptStart.Y))
Me.Invalidate()
End If
MyBase.OnMouseMove(e)
End Sub
Protected Overrides Sub OnPaint(pe As PaintEventArgs)
If (Me.isMoving) AndAlso (Me.Image IsNot Nothing) Then
With pe.Graphics
.TranslateTransform(Me.ptMove.X, Me.ptMove.Y)
.DrawImage(Me.Image, Point.Empty)
End With
End If
MyBase.OnPaint(pe)
End Sub
End Class
PD: nótese que para el ejemplo de arriba utilizo la imagen especificada en la propiedad PictureBox.Image, pero puedes hacer lo mismo con la imagen de la propiedad PictureBox.BackgroundImage.
Saludos.