網(wǎng)站首頁 編程語言 正文
在終端機器上的曲線顯示本打算用控件,可控件折騰好長時間也沒弄順,還是自己寫的好使,記錄下來后面再改進。
//繪圖部分的定義 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); }
實際效果圖:
點選不同的文字進行相應的實時動態(tài)圖的顯示。
原文鏈接:https://blog.csdn.net/dawn0718/article/details/88855341
相關(guān)推薦
- 2022-11-18 Android?使用壓縮紋理的方案_Android
- 2022-11-11 Android利用Canvas類繪制圖形_Android
- 2022-10-22 Kotlin淺析null操作方法_Android
- 2023-01-15 c++矩陣計算性能對比:Eigen和GPU解讀_C 語言
- 2023-01-31 go中make用法及常見的一些坑_Golang
- 2022-08-01 Android?WebView軟鍵盤遮擋輸入框方案詳解_Android
- 2022-07-27 Python?迭代器Iterator詳情_python
- 2022-05-28 Python庫AutoTS一行代碼得到最強時序基線_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支