canvas使用之beginPath 函式踩坑記

2021-09-11 03:30:27 字數 1319 閱讀 2405

先貼上網上看到的部落格,侵刪。

您的瀏覽器不支援 html5 canvas 標籤。

canvas中的繪製方法(如stroke, fill),都會以「上一次beginpath」之後的所有路徑為基礎進行繪製。比如上述**實際會畫兩條紅線,而不是一條黑線,一條紅線,stroke了兩次,都是以第一次beginpath後的所有路徑為基礎畫的。

我想實現的功能是根據座標的不同,而畫不同顏色的線條,如下圖這種形式,之前不知道beginpath的以上特性,所以很困惑畫出來的線條始終只有乙個顏色,從上面可以看出,只要不beginpath(),那麼第二次執行stroke的時候,不管你是否重新寫了moveto(x, y)函式,都會從剛開始的moveto(x, y)開始畫,這樣就會覆蓋掉之前畫的,所以為了解決這個問題,我在每次畫線之前都beginpath,然後條件判斷,滿足相應的條件,就畫對應顏色的線,因為每次都beginpath()了,所以不會出現線條覆蓋的問題,從而解決這個問題,但是本方法每畫乙個點,都要beginpath()一次,暫時還沒有想到更好的方法。

主要**如下,主要邏輯是當m的值在annint的一奇數下標開頭的連續兩個整數範圍內,就設定畫藍色的線,否則畫黑色的線,這裡有乙個問題是對每乙個點m都要遍歷陣列,來判斷它是否應該畫藍色,這裡有乙個問題是,如何才能知道已經遍歷完了整個陣列,且m不在範圍內,因為可能出現m不在annint[0]~annint[1]的範圍內,但是在annint[2]~annint[3]範圍內,於是設定乙個標誌資訊flag,初值為0,每次不滿足在陣列某兩個數範圍之間,值就加1.

flag是標誌資訊,如果當前點m的值並不在annint的範圍內,那麼對annint遍歷後,flag的值一定等於(count(annint))/2,此時可以按正常心電圖來畫了,當然因為本問題中annint的length為偶數,一般情況應寫成(count(annint)+1)/2。

for (; (px / n) < 30000 && m < 90000; px++, m++) 

flag++;//flag是標誌資訊,如果當前點m的值並不在annint的範圍內,那麼對annint遍歷後

//flag的值一定等於(count(annint))/2,此時可以按正常心電圖來畫了,當然因為本問題中annint的length為偶數,一般情況應寫成(count(annint)+1)/2

if(flag == (count(annint) )/2 )

}//for(f = 0; f < count(annint); f++)

Canvas基本使用

canvas的意思是畫布,表現在螢幕上就是一塊區域,我們可以再上面使用各種api繪製我們想要的東西。可以說,canvas貫穿整個2d graphics,android.graphics中的所有類,幾乎都於canvas有直接或間接的聯絡。所以了解canvas是學習2d graphics的基礎。andr...

canvas使用案例

最近遇到了合成的一些坑,所以就想學習一下canvas雖然說這個是h5的新特性但是也沒有怎麼了解過,下面就是一些學習的經驗 首先你需要建立canvan這個標籤,有了這個標籤你才可以對他進行操作,這樣這個標籤就建立好了下面就該是在js裡面對這個建立好的canvas進行操作了 let canvas doc...

微信小程式canvas元件簡單運用之塗鴉

以上是一部分 展示,下面做核心原理說明 1 能畫出不同顏色的線條 主要是以下三個方法 setstrokestyle 畫筆的顏色 moveto 把路徑移動到畫布中的指定點,但不建立線條 lineto 新增乙個新點,然後在畫布中建立從該點到最後指定點的線條 這樣就可以從a點座標到b點座標 畫出不同顏色的...