C# WindowsForms 在一张图片上,实现动态 画 矩形框, 得出矩形框 宽 高,和 x y 轴。
在Form的Paint事件中用Graphics 来绘制
参考:
首先,需要在窗体上添加一个PictureBox控件用于显示图片。在该PictureBox控件的MouseMove事件中,获取鼠标移动的位置,并根据鼠标按下的位置和移动的位置,在PictureBox控件上画出矩形框。在鼠标释放时,获取矩形框的宽度、高度和坐标,并输出到控制台或其他控件中。
下面是示例代码:
public partial class Form1 : Form
{
private Point startLocation; // 矩形框起点
private bool drawing = false; // 是否正在画矩形框
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
startLocation = e.Location;
drawing = true;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (drawing)
{
Rectangle rect = new Rectangle(startLocation, new Size(e.Location.X - startLocation.X, e.Location.Y - startLocation.Y));
pictureBox1.CreateGraphics().DrawRectangle(Pens.Red, rect);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
drawing = false;
Rectangle rect = new Rectangle(startLocation, new Size(e.Location.X - startLocation.X, e.Location.Y - startLocation.Y));
int x = rect.X;
int y = rect.Y;
int width = rect.Width;
int height = rect.Height;
Console.WriteLine("X: " + x);
Console.WriteLine("Y: " + y);
Console.WriteLine("Width: " + width);
Console.WriteLine("Height: " + height);
}
}
需要注意的是,在每次MouseMove事件中需要重新绘制整个PictureBox控件,以避免出现重绘问题。
另外,如果要在绘制矩形框的同时显示图片,并且矩形框不会遮盖图片内容,可以在PictureBox控件的Paint事件中绘制图片:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Image.FromFile("image.jpg"), pictureBox1.ClientRectangle);
}