1、实际运用中在picturebox上绘制图形相关解答
如picturebox设置了跟随父框架动态调整大小,但是矩形框并不会跟随变化,picturebox设置的是Zoom参数,怎么将矩形绘制到图片指定位置?
步骤:
1、获取图片和控件的比例:
由于 Zoom 模式下,图片可能没有完全填充整个 PictureBox,你需要先确定图片实际的缩放比例。
2、计算矩形位置:
计算矩形相对于图片的位置时,你需要考虑到图片的缩放比例以及 PictureBox 的大小变化。
3、绘制矩形:
使用调整后的坐标和大小来绘制矩形,确保它与缩放后的图片位置匹配。
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
// 获取PictureBox控件的尺寸
int pictureBoxWidth = pictureBox.ClientSize.Width;
int pictureBoxHeight = pictureBox.ClientSize.Height;
// 获取图片的尺寸
int imageWidth = pictureBox.Image.Width;
int imageHeight = pictureBox.Image.Height;
// 计算图片在PictureBox中的缩放比例
float scaleX = (float)pictureBoxWidth / imageWidth;
float scaleY = (float)pictureBoxHeight / imageHeight;
// 选择一个较小的比例来适配Zoom模式
float scale = Math.Min(scaleX, scaleY);
// 计算图片的缩放后的尺寸
int scaledWidth = (int)(imageWidth * scale);
int scaledHeight = (int)(imageHeight * scale);
// 计算图片的起始位置(居中显示)
int xOffset = (pictureBoxWidth - scaledWidth) / 2;
int yOffset = (pictureBoxHeight - scaledHeight) / 2;
// 定义矩形在图片中的位置(例如,矩形的原始位置是(100, 100),大小是(200, 200))
int rectX = 100;
int rectY = 100;
int rectWidth = 200;
int rectHeight = 200;
// 根据图片的缩放比例调整矩形的位置和大小
int scaledRectX = (int)((rectX - xOffset) * scale + xOffset);
int scaledRectY = (int)((rectY - yOffset) * scale + yOffset);
int scaledRectWidth = (int)(rectWidth * scale);
int scaledRectHeight = (int)(rectHeight * scale);
// 在图片上绘制矩形
e.Graphics.DrawRectangle(Pens.Red, scaledRectX, scaledRectY, scaledRectWidth, scaledRectHeight);
}
解释:
1、scaleX 和 scaleY 是 PictureBox 控件的宽高与图片的宽高之比。
2、使用 Math.Min(scaleX, scaleY) 来确定最适合的缩放比例,这样可以确保图片能够完全显示且按比例缩放;
3、确定矩形在原始图片中的位置(rectX, rectY, rectWidth, rectHeight)。
4、然后,将这些值乘以缩放比例,得到矩形在缩放后的图片中的实际位置。
5、使用 Graphics.DrawRectangle 方法在 PictureBox 上绘制矩形,确保矩形的位置和大小适应图片缩放后的显示。