[問題] 如何使用GDI+ 繪出同示波器的波形效果?
如題,小弟目前使用過MSCHART ...與 ZedGraph套件
將讀進來的數值進行及時繪圖 ( 訊息的速率為1點/1ms )
一秒取值一千點~( 最快可到兩千點...)
來源訊號為Sine ...
如果使用取一點標一點速度很明顯跟不上 ( 50ms頂多取一點 )
所以目前皆使用取滿一個Buffer=1000點的值在一次顯示
但是速度有比較好一點~但是繪圖似乎也跟不上
常會出現取值時間不固定,波形很醜的情況(歪歪的SINE波形 )
似乎在取值的時間上有落差(並不是每1ms就去取一個點...會因為其他UI的事件造成delay)
取值的方法我是使用Backgroundworker
private void BG_Worker2_DoWork(object sender, DoWorkEventArgs e)
{
for (; ; )
{
if (BG_Worker2.CancellationPending)
{
e.Cancel = true;
break;
}
else
{
//取點 .... IR_Buf 為存取點數 , DrawPointCt=設定點數,取多少點更新一次圖,點為浮點值
IR_Buf[DrawPontCt, 0] = Demo_RData[0];
IR_Buf[DrawPontCt, 1] = Demo_RData[1];
IR_Buf[DrawPontCt, 2] = Demo_RData[2];
IR_Buf[DrawPontCt, 3] = Demo_RData[3];
.....
.....
.....
if (DrawPontCt == PointCt - 1) //點數取滿後
{
DrawPontCt = 0;
if (Draw_already)
{
Draw_Buf_Ok = true;
if (BG_Woker1.IsBusy)
{ }
else
{
BG_Woker1.RunWorkerAsync();
}
}
}
else
{ //
DrawPontCt++;
Draw_Buf_Ok = false;
}
//若在此使用 sleep (1ms) ....效能會剩下100點/1秒
//Application.DoEvents();
//Thread.Sleep(1);
//所以要固定時間取值要使用for迴圈來做延遲嗎
for (int i = 0; i < Delay; i++) //
{ }
}
}
}
請問再取值的方式上是否要做什麼改正?
如果要精確做到( 一點 / 1ms 取值如何實現? )
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.94.126
→
10/24 12:52, , 1F
10/24 12:52, 1F
→
10/24 19:50, , 2F
10/24 19:50, 2F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章