c# PictureBox 的图像上使用鼠标画矩形框

https://www.cnblogs.com/luxiao/p/5625196.html

 

   C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现。当鼠标键按下时开始画框,鼠标键抬起时画框结束。

1

2

Point start; //画框的起始点

Point end,//画框的结束点<br>bool blnDraw;//判断是否绘制<br>

Rectangel rect;

  鼠标按下响应

1

2

3

4

5

6

private void PictureBox1_MouseDown(object sender, MouseEventArgs e)

{

      start = e.Location;

      Invalidate();

      blnDraw = true;

}

 鼠标移动响应 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

private void PictureBox1_MouseMove(object sender, MouseEventArgs e)

{

    if (blnDraw)

    {

        if (e.Button != MouseButtons.Left)//判断是否按下左键

            return;

        Point tempEndPoint = e.Location; //记录框的位置和大小

        rect.Location = new Point(

        Math.Min(start.X, tempEndPoint.X),

        Math.Min(start.Y, tempEndPoint.Y));

        rect.Size = new Size(

        Math.Abs(start.X - tempEndPoint.X),

        Math.Abs(start.Y - tempEndPoint.Y));

        PictureBox1.Invalidate();

     }

}       

  鼠标键抬起响应

1

2

3

4

private void PictureBox1_MouseUp(object sender, MouseEventArgs e)

 {

    blnDraw = false//结束绘制

 }

 重绘响应

1

2

3

4

5

6

7

8

9

10

11

12

13

14

private void imageBox1_Paint(object sender, PaintEventArgs e)

{

     if (blnDraw)

     {

         if (imageBox1.Image != null)

         {

             if (rect != null && rect.Width > 0 && rect.Height > 0)

              {

                  e.Graphics.DrawRectangle(new Pen(Color.Red, 3),rect);//重新绘制颜色为红色

               }

          }

      }

 

}

 注意:在绘制中如果导入的图像的SizeMode为StretchImage时,画框后图像会缩放,导致框有可能不在pictureBox中,需要将PictureBox的FunctionMode 修改为Minimum 便可。

可以使用以下步骤在 C# PictureBox 控件上使用鼠标线: 1. 创建一个 PictureBox 控件,并为其添加 MouseDown、MouseMove 和 MouseUp 事件处理程序。 2. 在 MouseDown 事件处理程序中,记录鼠标的起始位置。 3. 在 MouseMove 事件处理程序中,检查鼠标是否按下并移动,如果是,则使用 Graphics 对象在 PictureBox绘制一条线段。 4. 在 MouseUp 事件处理程序中,结束绘制。 下面是一个简单的示例代码: ```csharp private Point startPoint; private bool drawing = false; private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { startPoint = e.Location; drawing = true; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (drawing) { Graphics g = pictureBox1.CreateGraphics(); Pen pen = new Pen(Color.Black); g.DrawLine(pen, startPoint, e.Location); startPoint = e.Location; g.Dispose(); } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { drawing = false; } ``` 在上面的代码中,我们创建了一个 startPoint 变量来记录绘图的起始点,创建了一个 drawing 变量来检查鼠标是否处于绘图状态。在 MouseDown 事件处理程序中,我们记录了鼠标的起始位置,并将 drawing 设置为 true。在 MouseMove 事件处理程序中,如果鼠标正在绘制,我们使用 Graphics 对象在 PictureBox绘制一条线段,并更新 startPoint 的值。最后,在 MouseUp 事件处理程序中,我们将 drawing 设置为 false,以结束绘图。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值