91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HTML5Canvas save怎么保存恢復狀態

發布時間:2020-09-14 10:16:31 來源:億速云 閱讀:138 作者:小新 欄目:web開發

這篇文章主要介紹HTML5Canvas save怎么保存恢復狀態,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

在繪畫的時候,經常會有這種情況,本來正在用綠色筆畫,突然需要用紅色筆畫幾筆,但畫完了之后又要換成綠色筆。如果是在現實中作畫,可以把筆蘸上不同的墨水,畫了之后又蘸上之前的墨水,或者準備幾只筆,要用哪只就選哪只。

在Canvas中也可以這樣,不過Canvas中的畫筆永遠只有一只。所以,如果要更換畫筆的顏色,就需要保存和恢復狀態。狀態其實就是畫布當前屬性的一個快照,包括:

圖形的屬性值,如strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor等。

當前的裁切路徑。

當前應用的變換(即平移、旋轉和縮放)。

Canvas中,使用save()方法來保存狀態,使用restore()方法來恢復狀態。Canvas狀態是以棧的方式來保存:每次調用save()方法,就會把當前狀態壓入棧頂保存;每次調用restore()方法,就會把棧頂的狀態取出來,并把畫布恢復到這個狀態,用這個狀態繪圖。

context.fillStyle = "red";
context.fillRect(10, 10, 180, 180);
context.fill();
context.save();                 // ① 棧: "red"
context.fillStyle = "green";
context.fillRect(30, 30,140,140);
context.save();                 // ② 棧: "red","green"
context.fillStyle = "blue";
context.fillRect(50, 50, 100,100);
context.restore();               // 恢復到 ② 的狀態, 棧: "red","green"
context.beginPath();
context.fillRect(70, 70, 60, 60);   // 用棧頂的狀態繪圖,填充"green"
context.restore();               // 恢復到 ① 的狀態, 棧: "red"
context.fillRect(90, 90, 20, 20);   // 用棧頂的狀態繪圖,填充" red "
context.fill();

上述代碼中,首先繪制第一個紅色的矩形。接著調用第一個save()方法,把第一個紅色矩形的狀態壓棧,此時棧中只有一個元素"red",記為 ①。然后把狀態設置為"green",繪制第二個矩形,此時繪制出的是綠色矩形。接著調用第二個save()方法,把第二個綠色矩形的狀態壓棧,此時棧中有兩個元素"red","green",棧頂元素為"green",記為 ②。接著繪制第三個藍色矩形,此處沒有調用save()方法,棧的狀態不變。接著調用restore()方法,恢復到 ② 的狀態,繪制第四個矩形,此時棧頂元素為"green",故繪制出綠色矩形。接著再調用restore()方法,恢復到 ① 的狀態,繪制第五個矩形,此時棧頂元素為"red",故繪制出紅色矩形。

HTML5Canvas save怎么保存恢復狀態

從本例可以看到,通過save-restore組合把代碼包裹起來,實質上是把save()方法和restore()方法之間的樣式包裹起來,這樣一來,它們就不影響后面繪制的圖形。

save()方法和restore()方法都可以被調用任意多次,并且可以嵌套。記住,save()方法和restore()方法總是成對出現,每次調用restore()方法,都是恢復到最近一次調用save()方法時棧的狀態,并用該棧頂所保存的狀態進行繪制。

以上是HTML5Canvas save怎么保存恢復狀態的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顶山市| 黄浦区| 长垣县| 荣昌县| 上林县| 庆安县| 新兴县| 昔阳县| 全州县| 固阳县| 许昌县| 景洪市| 杭锦旗| 高唐县| 南丹县| 惠水县| 务川| 抚宁县| 扬中市| 醴陵市| 商南县| 葫芦岛市| 吴江市| 镇赉县| 潜山县| 方山县| 涞水县| 松潘县| 衡东县| 长乐市| 沈阳市| 台南市| 金沙县| 富阳市| 丹棱县| 江西省| 融水| 长岛县| 台中市| 章丘市| 格尔木市|