動態按比例繪製波形的思路以及按關係縮放公式

2021-08-03 06:20:35 字數 1710 閱讀 6376

在動態繪製中一開始出現的問題,主要是沒有做到乙個點乙個點的繪製,是一段一段的繪製的所以移動的時候給人一種一卡一卡的感覺,這個問題一開始顯示資料的時候都沒有發現這個問題不對,後來時間長了才發現為什麼繪製那麼規整,資料的波動沒有體現出來,檢視**發現,這個一段一段的繪製不對,應該每加入乙個點就應該按比例縮放一下

這裡先給出乙個比例縮放公式,本人感覺很好用,可以有效的將資料比例關係縮放到要顯示的最大範圍之內

縮放後值=(當前值-這組資料最小值)/(這組資料最大值-這組資料最小值)* 資料範圍;
這個公式可以有效的解決資料太大或者太小的問題。

接下來介紹大體流程:

執行緒接受到資料後,顯示計時器開始執行,顯示計數器中主要執行的操作就是一點一點的拿資料按比例縮放,然後放到乙個容器中然後 通過movetoex和lineto繪製點,當然還要注意到將顯示時要使用雙快取機制來繪製,要不會出現閃爍現象,這裡貼出部分繪製**

hdc hdc = pdc->getsafehdc();

::getclientrect(hwnd, rect);

/****建立第二快取區****/

cdc dcmen;

cbitmap bmp;

dcmen.createcompatibledc(pdc); // 建立依附視窗

bmp.createcompatiblebitmap(pdc, rect.width(), rect.height()); // 建立相容位圖

dcmen.selectobject(&bmp); // 將位圖選入記憶體

dcmen.fillsolidrect(rect, pdc->getbkcolor()); // 使得新建立的快取區的背景和原背景一致

hdc hdcmen = dcmen.getsafehdc();

// 繪製座標軸

if ( icooraxisnumber == 0 )

return

false;

int icoorheight = (rect.height() - (25 * icooraxisnumber)) / icooraxisnumber;

int icoorwidth = rect.width() - 40;

for ( int i = 0; i < icooraxisnumber; i++ )

// 繪製曲線

// 設定繪製曲線的畫筆

m_holdpen = dcmen.selectobject(&m_hnewpen);

if ( showdata )

m_vectrawdataarray.at(i).m_deqeegdata.clear();

}}// 貼圖到到介面中

pdc->bitblt(0, 0, rect.width(), rect.height(), &dcmen , 0, 0, srccopy);

// 釋放資源

::deletedc(dcmen);

::deleteobject(bmp);

::releasedc(hwnd, hdcmen);

m_vectrawdataarray.clear();

這裡沒有比例縮放和動態移動部分,會在後面新增,這個**還在修改中,估計下週動態顯示可以出現完整的。

動態陣列按值傳遞的引用

對於陣列的引用問題,我們在實際使用中不是很多,但是如果你做好的引用準備,你必須考慮好如何地進行初始化操作,如下 主程式private sub exam1 dim s as byte redim s 5 reada s 呼叫 end sub 子程式private sub reada byval ms ...

將div的寬 高按比例設定有什麼效果

在新增div時,對它的大小 寬 高 有兩種設定方法 固定值和百分比。1 若div的寬高為固定值,則該div的顯示效果會隨著其父div的縮放而變化。如下所示 2 若div的寬 高值為百分比,且其父div的寬 高值也為百分比,body的寬高預設未設定為指定值時,則該div的顯示不會因為瀏覽器的縮放而變化...

Qt(偽)自適應螢幕大小和控制項按比例縮放的幾個問題

最終確定的用法 this showfullscreen int mainwidth this width int mainheight this height 全屏主視窗,按比例求出各子視窗的位置和寬高,初始化子視窗時 new this,w,h 子視窗的建構函式中 qwidget parent,in...