2012-09-26 28 views
6

He estado tratando de hacer esto por unas horas, pero por mi vida no puedo hacerlo posible.winform mover una imagen dentro de un cuadro de imagen

Lo que estoy tratando de hacer es simplemente mover la imagen que se encuentra dentro de un cuadro de imagen en una aplicación winform. Mi imagen es aproximadamente 1000x1000 píxeles y mi cuadro es algo arbitrario, como 400x500, por lo que, por ejemplo, cuando hago clic en el mouse, me gustaría que la imagen se moviera 50 hacia la izquierda. Pero el cuadro de la imagen debe seguir siendo del mismo tamaño.

Por mi vida, sin embargo, no puedo hacer que esto funcione. Lo que he podido hacer es lo siguiente:

 if (kinectController.hands[0].fingertips.Count == 1) 
     { 
      pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage; 

     } 

Esta función es para mi aplicación de seguimiento de dedo kinect. Entonces, cuando la aplicación encuentra un único punto de búsqueda visible en la pantalla, la imagen se centra. Sin embargo, eventualmente me gustaría que la imagen se mueva junto con el movimiento de mis dedos, lo que vendrá una vez que encuentre el paso básico de mover la imagen unos pocos píxeles hacia un lado.

Cualquier ayuda con esto sería apreciada.

Respuesta

10

Hice un poco de investigación y aparentemente mover una imagen dentro de una PictureBox no es una tarea fácil, al menos no pude encontrar nada que hiciera esto posible (sin decir que no hay una manera de hacerlo) sin embargo).

Sin embargo, surgió un poco de "solución alternativa" para ver si esto se ajusta a sus necesidades. Para lograr esto:

  • Crear un panel de control, y el tamaño que sin embargo gran parte de la imagen que le gustaría mostrar
  • Dentro de ese lugar panel de un control PictureBox con su imagen en ella y establecer el SizeMode propiedad a AutoSize.

Ahora, poner este código en su forma

private bool Dragging; 
private int xPos; 
private int yPos; 
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { Dragging = false; } 
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Left) { 
     Dragging = true; 
     xPos = e.X; 
     yPos = e.Y; 
    } 
} 
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { 
    Control c = sender as Control; 
    if (Dragging && c!= null) { 
     c.Top = e.Y + c.Top - yPos; 
     c.Left = e.X + c.Left - xPos; 
    } 
} 

Ahora, cada vez que haga clic y arrastre en el cuadro de imagen, que en realidad no se mover la imagen dentro de él, pero el control de cuadro de imagen dentro del panel. De nuevo, no es exactamente lo que estabas buscando y no estoy seguro de cómo esto se convertiría en Kinect, pero espero que esto te lleve por el camino correcto.

Cuestiones relacionadas