В основном то, что я пытаюсь сделать, - это повернуть изображение с помощью событий мыши. Например, когда вы удерживаете левую кнопку мыши, изображение вращается, когда вы перемещаете мышь вверх и вниз. Я нашел здесь еще один вопрос, почти такой же, как у меня (Как повернуть изображение в C #), но при сопоставлении параметра угла в методе поворота (исходный код метода в ссылке) с вычисленным углом между мышью и центром изображения возникает исключение переполнения. Изображение, которое я пытаюсь повернуть, находится в рамке с картинками. Любые идеи? Должен ли я сделать это по-другому?
Заранее спасибо!
--------- РЕДАКТИРОВАТЬ 1 -----------
Хорошо, я думаю, что мой триггер был отключен, я изменил его на ...
Угол = Атан ((mousePosY - imageCenterY) / (mousePosX - imageCenterX)
Но теперь изображение не вращается, оно просто движется (я также запрограммировал его способность двигаться, но это работает нормально). Вот фрагмент кода, с которым я имею дело.
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
isDragging = true;
pbCurrentX = e.X;
pbCurrentY = e.Y;
}
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
// For moving the image
if (isDragging)
{
this.pictureBox1.Top = this.pictureBox1.Top + (e.Y - pbCurrentY);
this.pictureBox1.Left = this.pictureBox1.Left + (e.X - pbCurrentX);
}
// For rotating the image
if (rotateMode && isDragging)
{
y2 = e.Y;
y1 = (this.pictureBox1.Location.Y + (this.pictureBox1.Height / 2));
x2 = e.X;
x1 = (this.pictureBox1.Location.X + (this.pictureBox1.Width / 2));
angle = (float)Math.Atan((y2-y1)/(x2-x1));
// RotateImage method from the other question linked above
this.pictureBox1.Image = RotateImage(this.pictureBox1.Image, angle);
}
}
Флаг rotateMode устанавливается в значение true при двойном щелчке по изображению. Спасибо всем!
---------ОТВЕЧАТЬ-----------
Благодаря Гейбу я обнаружил все небольшие изъяны в своем коде, и теперь он отлично работает. Единственное, что я должен был сделать размер рамки изображения больше, чтобы соответствовать повернутому изображению. Вот правильный код для всех, кто хочет знать ответ.
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
isDragging = true;
pbCurrentX = e.X;
pbCurrentY = e.Y;
}
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging && !rotateMode)
{
this.pictureBox1.Top = this.pictureBox1.Top + (e.Y - pbCurrentY);
this.pictureBox1.Left = this.pictureBox1.Left + (e.X - pbCurrentX);
}
if (rotateMode && isDragging)
{
y2 = e.Y;
y1 = (this.pictureBox1.Location.Y + (this.pictureBox1.Height / 2));
x2 = e.X;
x1 = (this.pictureBox1.Location.X + (this.pictureBox1.Width / 2));
angle = (float)Math.Atan2((y1 - y2), (x1 - x2));
pictureBox1.Image = RotateImage(currentImage, (100*angle));
}
}
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
}
Спасибо Гейбу и всем остальным!