C#中在picturebox上绘制图形

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 上绘制矩形,确保矩形的位置和大小适应图片缩放后的显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值