在C#中 从一个picturebox中 按住鼠标左键不放 画一块区域后,另外一个picturebox(在一个winform 窗体上有两个picturebox )上马上把对应的截取图像显示出来

本文介绍了一个简单的图片选择器实现方法,通过鼠标拖动在PictureBox上绘制虚线矩形选择区域,并将选中部分复制到另一个PictureBox中。文章详细展示了如何监听MouseDown、MouseMove和MouseUp事件来完成这一过程。
        private int _x, _y;
        Image _img
= null;
       
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            _img
= pictureBox1.Image.Clone() as Image;
            _x
= e.X;
            _y
= e.Y;

        }

       
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
           
int sx = _x < e.X ? _x : e.X;
           
int sy = _y < e.Y ? _y : e.Y;
           
int w = Math.Abs(_x - e.X);
           
int h = Math.Abs(_y - e.Y);
            Graphics g
= Graphics.FromHwnd(pictureBox2.Handle);
            g.Clear(pictureBox2.BackColor);
            g.DrawImage(pictureBox1.Image,
new Rectangle(0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel);
        }

       
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
           
if (e.Button == MouseButtons.Left)
            {
                Pen p
= new Pen(Color.Red, 1);
                p.DashStyle
= System.Drawing.Drawing2D.DashStyle.Dash;
                Graphics g
= Graphics.FromHwnd(pictureBox1.Handle);
               
int sx = _x < e.X ? _x : e.X;
               
int sy = _y < e.Y ? _y : e.Y;
               
int w = Math.Abs(_x - e.X);
               
int h = Math.Abs(_y - e.Y);
                pictureBox1.Image
= _img;
                g.DrawRectangle(p, sx, sy, w, h);
            }
        }


不过这样效果不是很好,最好是这样,你有一个image保存最原始的图片, 画虚线框在这个image的副本上画,然后赋值给pictuebox1,取图片拷贝的时候也从原始的image上取
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值