Я пытаюсь создать приложение форм Windows, в котором, когда пользователь щелкает в любом месте окна изображения, прямоугольник появляется в том месте, где было нажато изображение.Как нарисовать прямоугольник на поле для изображения с координатами щелчка мыши
Однако, если я нажимаю в любом месте изображения, прямоугольник появится в некоторой случайной позиции независимо от того, где я щелкнул. Он может появляться как вблизи, так и далеко от щелчка мыши, и в некоторых случаях он никогда не выходит за пределы левой половины окна изображения.
Могу ли я найти руководство по решению этой проблемы? В частности, мне нужна позиция, в которой я щелкнул, чтобы быть центром прямоугольника.
Спасибо!
Это мой код для справки:
private void pbImage_Click(object sender, EventArgs e)
{
//Note: pbImage is the name of the picture box used here.
var mouseEventArgs = e as MouseEventArgs;
int x = mouseEventArgs.Location.X;
int y = mouseEventArgs.Location.Y;
// We first cast the "Image" property of the pbImage picture box control
// into a Bitmap object.
Bitmap pbImageBitmap = (Bitmap)(pbImage.Image);
// Obtain a Graphics object from the Bitmap object.
Graphics graphics = Graphics.FromImage((Image)pbImageBitmap);
Pen whitePen = new Pen(Color.White, 1);
// Show the coordinates of the mouse click on the label, label1.
label1.Text = "X: " + x + " Y: " + y;
Rectangle rect = new Rectangle(x, y, 200, 200);
// Draw the rectangle, starting with the given coordinates, on the picture box.
graphics.DrawRectangle(whitePen, rect);
// Refresh the picture box control in order that
// our graphics operation can be rendered.
pbImage.Refresh();
// Calling Dispose() is like calling the destructor of the respective object.
// Dispose() clears all resources associated with the object, but the object still remains in memory
// until the system garbage-collects it.
graphics.Dispose();
}
UPDATE 12:55 утра, 16/8/2015 - Я знаю, почему! Свойство SizeMode для pictureBox было установлено на StretchImage. Изменил его в нормальном режиме, и он работал нормально. Не совсем понятно, почему это так, я обязательно посмотрю.
Тем, кто ответил, большое вам спасибо за помощь! :)