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, но я надеюсь, что это приведет вас на правильный путь.