C# WindowsForms 在一张图片上,实现动态 画 矩形框, 得出矩形框 宽 高,和 x y 轴。

C# WindowsForms 在一张图片上,实现动态 画 矩形框, 得出矩形框 宽 高,和 x y 轴。

img

在Form的Paint事件中用Graphics 来绘制
参考:


不过题注应该是想实现类似jquery.jcrop图片裁剪类似效果吧,参考下面的
C# winform实现图片裁剪效果_winfrom 裁剪_忧郁的蛋~的博客-CSDN博客 onMouseMove的时候矩形边框的判断嘛自然是根据控件的宽度跟高度加上location来的噻 ,在边框按下鼠标拖拽相应调整控件的宽高跟坐标就行了。首先是拖拽的效果,他的过程是这样的:在鼠标左键按下时记录当前控件相对于父容器的坐标 也就是this.location属性 还有鼠标的坐标,第二 你需要做的处理就是 通过不同的方式对控件的长宽进行调整 并复写Control类的OnPaint来进行实时的显示。最后还在一个老外的网站上扣了一段羽化效果的代码,可废了俺老大劲儿了。好 核心的东西全解释完了 该出手了。 https://blog.csdn.net/lwf3115841/article/details/127728462

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/783973
  • 这篇博客你也可以参考下:Windows Forms:在C#中将图像转换成灰度图
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,需要在窗体上添加一个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);
    }
    
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632