canvas 填充覆蓋描邊
填充和描邊是canvas中最為基本的操作,本文不做詳細介紹。
更多內容可以參閱canvas 設定矩形樣式一章節。
但是有時候,這些操作會帶來令人奇怪的現象,比如本文將要介紹的填充覆蓋描邊。
首先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload=function(){ let canvas = document.getElementById("canvas"); let ctx = canvas.getContext("2d"); ctx.rect(10, 10, 100, 100); ctx.lineWidth=10; ctx.strokeStyle="blue"; ctx.fillStyle="red"; ctx.stroke(); ctx.fill(); } </script> </head> <body> <canvas id="canvas" width="300" height="150"></canvas> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).lineWidth屬性設定描邊寬度為10px,也就是邊框的厚度。
(2).fillStyle屬性設定填充顏色為紅色。
(3).很明顯邊框的描邊寬度沒有10px,也就是它很可能被填充遮蓋了。
原理很簡單,canvas繪製線條的時候,並不是沿著它的起始位置向外擴充套件,而是將這個起始位置作為中線向兩側擴充套件,這麼說可能大家還不明白,具體參閱canvas lineWidth繪製原理一章節。
如果不想出現上述現象,可以採用如下解決方案:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload=function(){ let canvas = document.getElementById("canvas"); let ctx = canvas.getContext("2d"); ctx.rect(10, 10, 100, 100); ctx.lineWidth=10; ctx.strokeStyle="blue"; ctx.fillStyle="red"; ctx.fill(); ctx.stroke(); } </script> </head> <body> <canvas id="canvas" width="300" height="150"></canvas> </body> </html>
程式碼執行效果截圖如下:
上述程式碼的表現已經恢復正常,很簡單隻要將ctx.fill方法和ctx.stroke方法調整一下位置即可。
也就是先填充再描邊,那麼描邊就會覆蓋在填充之上,後來者居上,很輕鬆解決此問題。
在網上也有關於此方面的解決方案,最好還是要了解出現此問題的原理。
可以做到舉一反三,而不是頭痛醫頭腳痛醫腳,僅浮在表面。
更多canvas知識可以參閱canvas教程板塊。
相關文章
- canvas 描邊與填充Canvas
- canvas描邊和填充介紹Canvas
- SVG 文字填充和描邊SVG
- canvas strokeText() 文字描邊Canvas
- SVG 填充、描邊和透明度設定SVG
- 短視訊系統原始碼,如何給button控制元件新增描邊、填充背景和描邊原始碼控制元件
- canvas fillText() 填充文字Canvas
- canvas fillText() 文字填充Canvas
- canvas填充樣式Canvas
- 矩形覆蓋
- HDU 1255 覆蓋的面積(線段樹+掃描線+離散化)
- 最小圓覆蓋
- Mysql索引覆蓋MySql索引
- 棋盤覆蓋
- 多邊形填充-活動邊表法
- 程式碼覆蓋率與測試覆蓋率比較
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- 全球覆蓋 雜湊
- 線段覆蓋(挖
- idea2022.1 檢視單測覆蓋率展示分支覆蓋率Idea
- php實現矩形覆蓋PHP
- 【劍指Offer】矩形覆蓋
- ESLint: 規則配置覆蓋EsLint
- 線段覆蓋問題
- MySQL 索引覆蓋(Covering Index)MySql索引Index
- JZ-010-矩形覆蓋
- 棋盤覆蓋問題
- pHp程式碼覆蓋率PHP
- 什麼是覆蓋索引?索引
- Pytorch 四種邊界填充方式(Padding)PyTorchpadding
- 使用CustomForwardRendererData做描邊效果Forward
- 阿里雲 OpenYurt 成為 CNCF 沙箱專案,加速原生 Kubernetes 邊緣場景全覆蓋阿里
- 精準測試之覆蓋
- java覆蓋率檢測-jacocoJava
- 76. 最小覆蓋子串
- 健康低輻射,訊號全覆蓋,飛魚星i-Home覆蓋方案上市
- 最大匹配、最小頂點覆蓋、最大獨立集、最小路徑覆蓋(轉)(再轉)
- 自動化會提高測試覆蓋率,那測試覆蓋率是什麼?