【发布时间】:2019-10-25 21:55:32
【问题描述】:
我在Panel 中有一个PictureBox,并且我已经使用TrackBar 实现了缩放功能。
当我增加(或减少)PictureBox 时,图像的位置保持固定在PictureBox 的左侧。
查看示例以更好地理解问题。
我想要的是与Panel 的中心相比重新定位图像的可能性。看下面的例子
例如我尝试用这种方式定义PictureBox X 原点:
- 在缩放之前,我计算
PictureBox(x0) 的原点和Panel(x1) 的中心之间的距离 (Δdx)。 - 我使用缩放系数 (Δdx') 增加距离。
- 我将图像的新原点 (x0') 计算为 x1 - Δdx'
我对 Y 执行相同操作,并使用 x0' 和 y0' 定义新的 PictureBox 位置。
代码如下:
// 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.如果我使用固定值作为图片框的原点(例如Point p = new Point(50, 50)),调整大小有效,但显然Picturebox的位置是固定的。
【问题讨论】:
-
imgY.Location 没有意义,请贴出你使用的真实代码。
-
出现错误,我已更正。这是我正在使用的功能
-
这里的过程描述有些混乱。目前尚不清楚您是否要调整图片框的大小/重新定位图片框、其中的图像或两者兼而有之。您至少可以指定 PictureBox 的 SizeMode 是什么吗?将一个矩形保持在另一个矩形中间所涉及的数学运算,无论两者的大小如何,都非常简单。
-
@Jimi 我编辑了我的问题,希望这次更清楚
-
缺失部分:TrackBar 的最小值和最大值是什么,它们代表什么?一个百分比,其中
100等于...什么?容器的大小?图片的实际大小?在这种情况下,该值是否可以超过 100%?或者 TrackBar 值代表像素大小?您发布的图片可能会有所帮助,但实现细节更重要,因为您在实现方法时寻求帮助。
标签: c# winforms picturebox