У меня есть координаты изображения из мест Mousedown на Picturebox успешно, будь то различные режимы работы с Picturebox. Но сталкиваются с трудностями в поиске центральной точки после операции панорамирования или масштабирования. На данный момент я работаю только в Normal Sizemode из Picturebox, чтобы достичь следующего.Как получить координаты изображения (точек) из ящика изображения независимо от панорамирования и масштабирования
Моя главная цель ::
1. нарисовать круг с MouseDown место в центре
2. Далее найти радиус (в пикселях) от круг, нарисованный на Picturebox (не на изображении), который должен быть таким же всегда даже после панорамирования и масштабирования. Даже после масштабирования или панорамирования, если я нарисую круг (или эллипс), он должен дать мне радиус с точки зрения изображения. Я знаю преобразование точек в пиксели.
Я реализовал панорамирование с помощью MouseDown, вверх и переместить события и реализовано масштабирование с помощью TrackBar. Мне нужна помощь в следующих разделах: Условие 1: Открываю изображение >> Скопируйте его на определенное расстояние >> Включите инструмент «Круг» >> нарисуйте его с центром внутри границы изображения, а круг должен тогда и там Условие 2: Я открываю изображение >> Нарисуйте круг, поместите его, круг должен быть переведен на ту же сумму, что и изображение. Вот мои MouseDown, MouseUp, MouseMove и покраска методы:
Пожалуйста, скажите мне, если вам нужна функция тела или something.Because его просто большой грязный приложение, которое я работаю
Скажите мне, если вам что-нибудь нужно. Открой любой другой подход к дизайну, соответствующий моей главной цели, упомянутой выше.
EDIT после ответа TerryBozzio в ::
Bitmap _bmp;
private bool _isMouseDown = false;
private Point _mouseDownLocation = Point.Empty;
int _xDifference, _yDifference;
public Form1()
{
InitializeComponent();
_bmp = RenderImageOfSpecifiedSize(@"C:\Users\Public\Pictures\Sample Pictures\2 duck.bmp");
_pictureBox.Image = _bmp;
}
private Bitmap RenderImageOfSpecifiedSize(string fileLocation)
{
//return new Bitmap(new Bitmap(fileLocation),new Size(300,300));
return new Bitmap(fileLocation);
}
private void _pictureBox_MouseDown(object sender, MouseEventArgs e)
{
_isMouseDown = true;
_mouseDownLocation = new Point(e.X, e.Y);
}
private void _pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (_isMouseDown)
{
_xDifference = _mouseDownLocation.X > e.X ? _mouseDownLocation.X - e.X : e.X - _mouseDownLocation.X;
_yDifference = _mouseDownLocation.Y > e.Y ? _mouseDownLocation.Y - e.Y : e.Y - _mouseDownLocation.Y;
_pictureBox.Invalidate();
}
}
private void _pictureBox_MouseUp(object sender, MouseEventArgs e)
{
_isMouseDown = false;
}
private void _pictureBox_Paint(object sender, PaintEventArgs e)
{
_txtCenter.Text= _xDifference.ToString() + " - " + _yDifference.ToString();
e.Graphics.DrawEllipse(Pens.Red, _mouseDownLocation.X - _xDifference, _mouseDownLocation.Y - _yDifference, _xDifference * 2, _yDifference * 2);
}
@ terryBozio, Спасибо, что ответили. Я включил свой код в соответствии с вашим ответом в виде вышеизложенного. См. Функцию RenderImageOfSpecifiedSize (строка fileLocation). Укомплектовывайте линию внутри своего тела, и я получаю радиус разным, который должен быть таким же, независимо от размера изображения (будь то больше, чем картинка или меньше). Меня больше беспокоит место в муссонах, которое будет служить центром для круга. Как бы вы сохранили этот центр, не затронутый размером изображения. Моя другая цель - также отобразить радиус (без изменения панорамирования изображения). –
вы можете просто сделать это: _pictureBox.Image = Изображение.FromFile (@ "C: \ Users \ Public \ Pictures \ Sample Pictures \ 2 duck.bmp"); ... остальная часть кода работает просто отлично, потому что графический объект рисует поверхность picbox, так что координаты остаются то же самое после изменения размера изображения, на всякий случай, когда я попытался установить кнопки для изменения sizemode picbox и остался тем же самым и лучезарным. – terrybozzio