亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#繪制實時曲線圖的方法詳解

 更新時間:2022年02月26日 10:22:17   作者:dawn  
這篇文章主要為大家詳細介紹了如何利用C#繪制實時曲線圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在終端機器上的曲線顯示本打算用控件,可控件折騰好長時間也沒弄順,還是自己寫的好使,記錄下來后面再改進。

        //繪圖部分的定義
        Int32 Draw_Top;//繪畫Y起點
        Int32 Draw_Left;//繪畫X起點
        Int32 Draw_EdgeWidth;//X邊緣寬度
        Int32 Draw_EdgeHeight;//Y邊緣高度
        Int32 Draw_RangeWidth;//繪畫范圍寬度
        Int32 Draw_RangeHeight;//繪畫范圍高度
        Double[] XTDYData = new Double[21];
        Int32 ICountDraw=0;
        
        Int32 IActualWidth, IActualHeight;
        Int32 Draw_AdjustX = 20;
        Int32 Draw_AdjustY = 20;
        Point StartPoint = new Point();
        Point EndPoint = new Point();
        Point ZeroPoint = new Point();
        Int32 IScalesY = 11;
        Int32 IScalesX = 21;
        Int32 IIncrementX;
 
        Pen pSpecial = new Pen(Color.Black,1);
        Pen pCommon = new Pen(Color.Black,2);
        Font FontTitle = new Font("微軟雅黑", 12);//寫標題的字體
        Font FontText = new Font("微軟雅黑", 9);//寫正文的字體           
        SolidBrush SBTitle = new SolidBrush(Color.Red);
        SolidBrush SBText = new SolidBrush(Color.Black);

在數(shù)據(jù)接收的事件中進行曲線繪制:

                    //顯示趨勢圖
                    ICountDraw = ICountDraw + 1;
                    if (ICountDraw ==21)
                    {
                        for (int i=1;i<21;i++)
                        {
                            XTDYData[i - 1] = XTDYData[i];
                        }
                        XTDYData[20]= YBDWDealWithData.TYNDianYa.dValue;
                        ICountDraw = 20;
                    }
                    else
                    {
                        XTDYData[ICountDraw] = YBDWDealWithData.TYNDianYa.dValue;
                    }
                    FuncDrawYBDW();

下面是基礎(chǔ)函數(shù):

        public void FuncDrawYBDW() {
            Bitmap bmp = new Bitmap(Draw_RangeWidth, Draw_RangeHeight);//定義畫布的大小
            Graphics graphics = Graphics.FromImage(bmp);
            FuncDrawBasePic(ref graphics);
            FuncDrawDynamicPic(ref graphics);
            Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
            g.DrawImage(bmp, new Point(0, 0));//在內(nèi)存中畫完后顯示在pictureBox1上,避免閃爍
        }
 
        public void FuncDrawBasePic(ref Graphics YBDWCanvas)
        {
            //繪制基礎(chǔ)
            //畫一個方框
            YBDWCanvas.FillRectangle(Brushes.WhiteSmoke, Draw_Top, Draw_Left, Draw_RangeWidth, Draw_RangeHeight);
            //畫坐標軸X
            pCommon.Width = 2;
            pCommon.Color = Color.Black;
            StartPoint.X = Draw_Left + Draw_AdjustX;
            StartPoint.Y = Draw_Top + Draw_RangeHeight - Draw_AdjustY * 2;
            EndPoint.X = Draw_Left + Draw_RangeWidth - Draw_AdjustX * 2;
            EndPoint.Y = Draw_Top + Draw_RangeHeight - Draw_AdjustY * 2;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            IActualWidth = EndPoint.X - StartPoint.X;
            YBDWCanvas.DrawString("X", FontText, SBText, EndPoint.X, EndPoint.Y - 8);
            //畫箭頭
            StartPoint.X = EndPoint.X - 8;
            StartPoint.Y = EndPoint.Y - 4;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            StartPoint.X = EndPoint.X - 8;
            StartPoint.Y = EndPoint.Y + 4;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            //畫坐標軸Y
            pCommon.Width = 2;
            pCommon.Color = Color.Black;
            StartPoint.X = Draw_Left + Draw_AdjustX;
            StartPoint.Y = Draw_Top + Draw_AdjustY;
            EndPoint.X = Draw_Left + Draw_AdjustX;
            EndPoint.Y = Draw_Top + Draw_RangeHeight - Draw_AdjustY * 2;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            IActualHeight = EndPoint.Y - StartPoint.Y;
            ZeroPoint = EndPoint;
            //畫畫箭頭
            EndPoint.X = StartPoint.X - 4;
            EndPoint.Y = StartPoint.Y + 8;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            EndPoint.X = StartPoint.X + 4;
            EndPoint.Y = StartPoint.Y + 8;
            YBDWCanvas.DrawLine(pCommon, StartPoint, EndPoint);
            YBDWCanvas.DrawString("Y", FontText, SBText, EndPoint.X, EndPoint.Y - 8);
            //畫X刻度
            pSpecial.Width = 1;
            pSpecial.DashStyle = DashStyle.Custom;
            pSpecial.DashPattern = new float[] { 1f, 1f };
            IIncrementX = IActualWidth / IScalesX;
            for (int i = 1; i < IScalesX; i = i + 1)
            {
                StartPoint.X = ZeroPoint.X + IIncrementX * i;
                StartPoint.Y = ZeroPoint.Y - 2;
                EndPoint.X = StartPoint.X;
                EndPoint.Y = StartPoint.Y - IActualHeight - 2;
                YBDWCanvas.DrawLine(pSpecial, StartPoint, EndPoint);
                //寫標識字
                if (i % 2 == 0)
                {
                    YBDWCanvas.DrawString(i.ToString(), FontText, SBText, StartPoint.X - 6, StartPoint.Y + 4);
                }
            }
 
            //畫Y刻度
            Int32 IIncrementY = IActualHeight / IScalesY;
            for (int i = 1; i < IScalesY; i = i + 1)
            {
                StartPoint.X = ZeroPoint.X;
                StartPoint.Y = ZeroPoint.Y - IIncrementY * i;
                EndPoint.X = StartPoint.X + IActualWidth;
                EndPoint.Y = StartPoint.Y;
                YBDWCanvas.DrawLine(pSpecial, StartPoint, EndPoint);
                //寫標識字
                if (i % 2 == 0)
                {
                    YBDWCanvas.DrawString((i - 1).ToString(), FontText, SBText, StartPoint.X - 12, StartPoint.Y + 4);
                }
            }
            //寫標題
            //Rectangle YBDWMessRect = new Rectangle(SX, SY, MessageDotRadius * 2, MessageDotRadius * 2);//圓的大小
            //YBDWCanvas.FillEllipse(SBTitle, YBDWMessRect);
            //畫連接線
            YBDWCanvas.DrawString(SDrawTitle, FontTitle, SBTitle, 100,30);
 
        }
 
        public void FuncDrawDynamicPic(ref Graphics YBDWCanvas)
            {
            //準備實際畫線的數(shù)據(jù)
            Point[] XTDYPoints =new Point[21];//系統(tǒng)電壓數(shù)據(jù)
            for (int i = 0; i < IScalesX; i = i + 1)
            {
                    XTDYPoints[i].X = ZeroPoint.X + IIncrementX * i;
                    XTDYPoints[i].Y = ZeroPoint.Y - (int)((XTDYData[i]/IActualHeight)*6000);
            }
            pSpecial.Width = 3;
            pSpecial.Color = Color.Red;
            YBDWCanvas.DrawCurve(pSpecial, XTDYPoints, 3.0F);
        }

實際效果圖:

點選不同的文字進行相應(yīng)的實時動態(tài)圖的顯示。

以上就是C#繪制實時曲線圖的方法詳解的詳細內(nèi)容,更多關(guān)于C#實時曲線圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#新手常犯的錯誤匯總

    C#新手常犯的錯誤匯總

    這篇文章主要介紹了C#新手常犯的錯誤匯總,對于經(jīng)驗豐富的C#程序員同樣具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C# 計算標準偏差相當(dāng)于Excel中的STDEV函數(shù)實例

    C# 計算標準偏差相當(dāng)于Excel中的STDEV函數(shù)實例

    下面小編就為大家?guī)硪黄狢# 計算標準偏差相當(dāng)于Excel中的STDEV函數(shù)實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#圖像亮度調(diào)式與偽彩色圖的處理教程(推薦)

    C#圖像亮度調(diào)式與偽彩色圖的處理教程(推薦)

    下面小編就為大家推薦一篇C#圖像亮度調(diào)式與偽彩色圖的處理教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解

    P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解

    這篇文章主要為大家介紹了P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • C#多線程系列之原子操作

    C#多線程系列之原子操作

    本文詳細講解了C#多線程的原子操作,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 基于C#實現(xiàn)語音識別功能詳解

    基于C#實現(xiàn)語音識別功能詳解

    在.NET4.0中,可以借助System.Speech組件讓電腦來識別我們的聲音。本文將利用該組件實現(xiàn)語音識別功能,文中實現(xiàn)過程講解詳細,需要的可以參考一下
    2022-04-04
  • C#使用正則表達式

    C#使用正則表達式

    這篇文章介紹了C#使用正則表達式的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#實現(xiàn)讀取Word表格到DataSet

    C#實現(xiàn)讀取Word表格到DataSet

    在應(yīng)用項目里,多數(shù)情況下我們會遇到導(dǎo)入 Excel 文件數(shù)據(jù)到數(shù)據(jù)庫的功能需求,但某些情況下,也存在使用 Word 進行表格數(shù)據(jù)編輯的情況,這其中也包括導(dǎo)入Word內(nèi)容的功能,比如表格數(shù)據(jù)導(dǎo)出到DataSet數(shù)據(jù)集,本文將給大家介紹了C#讀取Word表格到DataSet
    2023-12-12
  • c# 開發(fā)文字識別軟件

    c# 開發(fā)文字識別軟件

    這篇文章主要介紹了c# 開發(fā)文字識別軟件的方法,幫助大家更好的利用c#進行文字識別,感興趣的朋友可以了解下
    2020-12-12
  • C# BackgroundWorker使用教程

    C# BackgroundWorker使用教程

    這篇文章主要為大家詳細介紹了C# BackgroundWorker使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論