Mschar winform下 简易实现选择范围内图像放大

本文介绍如何在WinForm应用中利用MSChart控件,通过鼠标操作实现图像的选择与放大功能。通过监听鼠标按下、移动和松开事件,计算并更新图表的显示范围,达到区域内图像放大的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       bool can_fit = false;  //判断鼠标按下
        int x1 = 0;
        int y1 = 0;    //鼠标焦点左上角
        double x_begin = 0;

        double y_end = 0;   //chart坐标左上角

   private void Form1_Load(object sender, EventArgs e)

{

    for (double i = 1; i < 20; i++)
                {
                    chart1.Series["Series1"].Points.AddXY(i, i);   /////简单初始化 chart
                }

}

//chart 鼠标按下事件

    private void chart1_MouseDown(object sender, MouseEventArgs e)
        {

            x1 = e.X;
            y1 = e.Y;
            x_begin = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(Convert.ToDouble(x1));   //鼠标焦点坐标 转换为chart坐标
            y_end= chart1.ChartAreas["ChartArea1"].AxisY.PixelPositionToValue(Convert.ToDouble(y1));
            can_fit = true;

        }

//chart 鼠标移动事件

        private void chart1_MouseMove(object sender, MouseEventArgs e)
        {

            {

                if (can_fit)
                {
                    int x = e.X;
                    int y = e.Y;
                    double xx = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(Convert.ToDouble(x));
                    double yy = chart1.ChartAreas["ChartArea1"].AxisY.PixelPositionToValue(Convert.ToDouble(y));
                    label1.Text = xx.ToString() + " " + yy.ToString();
                    this.Refresh();
                    Pen blackPen = new Pen(Color.Red, 2);
                    blackPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
                    chart1.CreateGraphics().DrawRectangle(blackPen, x1, y1, x - x1, y - x1);   //矩形框


                }

            }

        }

//chart 鼠标松开事件

  private void chart1_MouseUp(object sender, MouseEventArgs e)
        {
            can_fit = false ;
            this.Refresh();
            double   x_end = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(Convert.ToDouble(e.X));
            double   y_begin = chart1.ChartAreas["ChartArea1"].AxisY.PixelPositionToValue(Convert.ToDouble(e.Y));
       
            chart1.ChartAreas["ChartArea1"].AxisX.Minimum = Convert.ToDouble(((int)x_begin));
            chart1.ChartAreas["ChartArea1"].AxisY.Minimum = Convert.ToDouble(((int)y_begin));
            chart1.ChartAreas["ChartArea1"].AxisX.Maximum = Convert.ToDouble(((int)x_end));
            chart1.ChartAreas["ChartArea1"].AxisY.Maximum = Convert.ToDouble(((int)y_end));
        }

效果图如下:

放大后:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值