У меня есть PictureBox
внутри Panel
, и я реализовал функцию масштабирования с TrackBar
.
Когда я увеличиваю (или уменьшаю) PictureBox
, положениеизображение остается фиксированным на левой стороне PictureBox
.См. Пример, чтобы лучше понять проблему.
Мне нужна возможность перемещения изображения по сравнению с центром Panel
.См. Следующий пример
Например, я попытался определить происхождение PictureBox
X следующим образом:
- перед увеличением я вычисляю расстояние (Δdx) между началом
PictureBox
(x0) и центром Panel
(x1). - Я увеличиваю расстояние с коэффициентом увеличения (Δdx ').
- Я вычисляю новый источник изображения (x0 ') как x1 - Δdx'
Я делаю то же самое с Y и определяю новое местоположение PictureBox
сx0 'и y0'.
Вот код:
// new image width after the zoom
double width = pbImg.Image.Width + (pbImg.Image.Width * trackbar.Value / 100);
// new image height after the zoom
double height = pbImg.Image.Height + (pbImg.Image.Height * trackbar.Value / 100);
// panel center
int cX = panel.Width / 2;
int cY = panel.Height / 2;
// actual origin for the picturebox
int imgX = pbImg.Location.X;
int imgY = pbImg.Location.Y;
// distance the panel center and the picturebox origin
int distFromXc = cX - imgX;
int distFromYc = cY - imgY;
// new distance with zoom factor
distFromXc = distFromXc + (distFromXc * trackbar.Value / 100);
distFromYc = distFromYc + (distFromYc * trackbar.Value / 100);
// new origin point for the picturebox
int pbX = (cX - distFromXc);
int pbY = (cY - distFromYc);
// new dimension for the picturebox
pbImg.Size = new Size(Convert.ToInt32(width), Convert.ToInt32(height));
// relocate picturebox
Point p = new Point(pbX, pbY);
pbImg.Location = p;
Я пытался изменить этот код C#
, но я с ним не знаком.
В моем случае я хочу управлять Picturebox
и изображением внутри него как одним и тем же объектом (если это возможно).
Мне нужна возможность увеличить (или уменьшить) Picturebox
(иизображение внутри), но я хочу, чтобы Picturebox
оставался в центре там, где он находится в настоящее время.
SizeMode
изображения StretchImage
.
Trackbar
имеет 0%как он минимальное значение и 100% как максимум.Размер Picturebox
и изображение внутри могут быть переменными, я получаю изображения из другого программного обеспечения.
Увеличенное Picturebox
может быть больше, чем Panel
, но это не проблема,потому что я могу переместить его.
Проблемы заключаются в следующем: 1. Если я использую код, который я написал выше, репозиция, кажется, работает, но Picturebox
не изменяется.2. Если я использую фиксированное значение для источника Picturebox (например, Point p = new Point(50, 50)
), изменение размера работает, но, очевидно, положение Picturebox
фиксировано.