C#图片放大缩小拖动

本文介绍如何在C#中使用PictureBox控件实现图片的缩放和拖动功能。通过监听MouseWheel事件,实现鼠标滚轮控制图片的放大和缩小,并保持鼠标位置不变。同时,通过MouseDown和MouseMove事件,实现PictureBox内的图片拖动。

1.Panel里放picturebox,picturebox大小与panel相同。

放大缩小:

在窗体load事件中加入

this.MouseWheel += splitContainer1_Panel1_MouseWheel;(我用的是splitContainer,panel同理)

void splitContainer1_Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
            Rectangle rectangle=new Rectangle();
            rectangle = splitContainer1.RectangleToClient(this.ClientRectangle);
            if (rectangle.Contains(MousePosition)) //判断鼠标位置是否在图片区域内
            {
                double step = 1.2;//缩放倍率
                if (e.Delta > 0)//放大
                {
                    if (pictureBox3.Height < Screen.PrimaryScreen.Bounds.Height * 4)
                    {
                        pictureBox3.Size = new Size((int)(pictureBox3.Width * step), (int)(pictureBox3.Height * step));//调整picturebox大小
                        int px_add = (int)(pictureBox3.PointToClient(MousePosition).X * (step - 1.0));
                        int py_add = (int)(pictureBox3.PointToClient(MousePosition).Y * (step - 1.0));
                        pictureBox3.Location = new Point(pictureBox3.Location.X - px_add, pictureBox3.Location.Y - py_add);//调整picturebox位置
                    }
                }
                else//缩小
                {
                    if (pictureBox3.Height > splitContainer1.Panel1.Height)
                    {
                        pictureBox3.Size = new Size((int)(pictureBox3.Width / step), (int)(pictureBox3.Height / step));
                        int px_add = (int)(pictureBox3.PointToClient(MousePosition).X * (1.0 - 1.0 / step));
                        int py_add = (int)(pictureBox3.PointToClient(MousePosition).Y * (1.0 - 1.0 / step));
                        pictureBox3.Location = new Point(pictureBox3.Location.X + px_add, pictureBox3.Location.Y + py_add);
                    }
                   
                }
            }

拖动图片

        Point mouseDownPoint = new Point();//鼠标按下时的坐标
        Boolean isSelected = false;
        private void pictureBox4_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mouseDownPoint.X = Cursor.Position.X;  //注:全局变量mouseDownPoint前面已定义为Point类型
                mouseDownPoint.Y = Cursor.Position.Y;
                isSelected = true;
            }
        }

        private void pictureBox4_MouseMove(object sender, MouseEventArgs e)
        {
            if (isSelected && IsMouseInPanel())//鼠标选中并且在panel内
            {
                this.pictureBox4.Left = this.pictureBox4.Left + (Cursor.Position.X - mouseDownPoint.X);
                this.pictureBox4.Top = this.pictureBox4.Top + (Cursor.Position.Y - mouseDownPoint.Y);
                mouseDownPoint.X = Cursor.Position.X;
                mouseDownPoint.Y = Cursor.Position.Y;
            }
        }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值