winform перемещение изображения внутри picturebox

то, что я пытаюсь сделать, это просто переместить изображение, найденное в окне изображения в приложении winform. Мое изображение примерно 1000x1000 пикселей, а моя коробка-что-то произвольное, например 400x500, поэтому, например, когда я нажимаю кнопку мыши, я хочу, чтобы изображение переместилось на 50 влево. Но поле изображения должно оставаться того же размера.

для жизни меня, однако, я не могу заставь это работать. То, что я смог сделать, это следующее:

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

        }

эта функция для меня кинект палец приложение. Поэтому, когда приложение находит одну точку поиска, видимую на экране, изображение центрируется. Тем не менее, я хотел бы, чтобы изображение двигалось вместе с движением пальца, которое придет, как только я отработаю основной шаг перемещения изображения на несколько пикселей в сторону.

любая помощь в этом будет оценена.

1 ответов


Я сделал немного исследований и, по-видимому, перемещение изображения в PictureBox-непростая задача, по крайней мере, я не мог найти ничего, что сделало бы это возможным (не говоря, что нет способа сделать это).

тем не менее, я придумал немного "обходного пути", посмотрите, соответствует ли это вашим потребностям. Для этого:

  • создайте Панель управления и размер его, сколько бы изображения вы хотел бы отобразить
  • внутри этой панели поместите элемент управления PictureBox с изображением в него и установите для свойства SizeMode значение AutoSize.

Теперь поместите этот код в свою форму

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;
    }
}

теперь, когда вы нажимаете и перетаскиваете PictureBox, он фактически не перемещает изображение внутри него, а элемент управления PictureBox внутри панели. Опять же, не совсем то, что вы искали, и я не уверен, как это преобразуется в Kinect, но я надеюсь, что это приведет вас на правильный путь.