国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

如何繪制路徑-線段

來源:懂視網 責編:小采 時間:2020-11-27 15:08:06
文檔

如何繪制路徑-線段

如何繪制路徑-線段:Canvas繪圖環境中有些屬于立即繪制圖形方法,有些繪圖方法是基于路徑的。立即繪制圖形方法僅有兩個strokeRect(),fillRect(),雖然strokezText(),fillText()方法也是立即繪制的,但是文本不算是圖形。基于路徑的繪制系統 大多數繪制系統,如:SVG(Scal
推薦度:
導讀如何繪制路徑-線段:Canvas繪圖環境中有些屬于立即繪制圖形方法,有些繪圖方法是基于路徑的。立即繪制圖形方法僅有兩個strokeRect(),fillRect(),雖然strokezText(),fillText()方法也是立即繪制的,但是文本不算是圖形。基于路徑的繪制系統 大多數繪制系統,如:SVG(Scal
Canvas繪圖環境中有些屬于立即繪制圖形方法,有些繪圖方法是基于路徑的。

立即繪制圖形方法僅有兩個strokeRect(),fillRect(),雖然strokezText(),fillText()方法也是立即繪制的,但是文本不算是圖形。

基于路徑的繪制系統
大多數繪制系統,如:SVG(Scalable Verctor Graphics, 可縮放的矢量圖形),Adobe Illustrator等,都是基于路徑的,

使用這些繪制系統時,你需要先定義一個路徑,然后再對其進行描邊或填充,也可以描邊加填充這樣圖形才能顯示出來。

Canvas中的三種繪制方式:

繪制一條線段

Canvas繪圖環境中,線段也是基于路徑繪制的,稱為線性路徑,創建線性路徑的方法:moveTO()與lineTo(),在創建路徑之后調用stroke()方法,才能在Canvas中畫出線段出來。

這就是前面我們所說的基于路徑的繪制方法,必須對其進行描邊或者填充;

通常兩點連一線因此繪制線段非常簡單,通過moveTO()指定線的起點,通過lineTo()移動到另一個點。

function drawLine(){
 cxt.moveTo(50, 50);
 cxt.lineTo(100, 100);
}

然而這樣我們在畫布中是看不見線段的,前面我們說到基于路徑的繪制方法,必須要描邊或者填充。所以要想看到結果,我們必須還要使用stroke()方法。

因此我們把方法修改成下面這樣就會繪制出一條線段

function drawLine(){
 cxt.moveTo(50, 50);
 cxt.lineTo(200, 200);
 cxt.stroke();
}

我們只使用lineTo()也是能在畫布中繪制出線段的,我們把上面的代碼改成如下面所示,效果也是一樣的

function drawLine(){
 cxt.lineTo(50, 50);
 cxt.lineTo(200, 200);
 cxt.stroke();
}

總結下moveTo()與lineTo()的用法

  • moveTo(x,y): 將筆觸移動到指定的坐標x以及y上,向當前路徑中增加一條子路徑,該方法不會清除當前路徑中的任何子路徑。

  • lineTo(x,y): 繪制一條從當前位置到指定x以及y位置的直線,如果當前路徑中沒有子路徑,那么這個方法的行為與moveTo()一樣。如果當前路徑中存在子路徑,此方法會將你所指定的這個點加入子路徑中。

  • 改變線段的樣式

    改變線段的寬度

    function= 14;
     cxt.lineTo(50, 50);
     cxt.lineTo(200, 200);
     cxt.stroke();
    }

    改變線段的顏色

    function drawLine(){
     cxt.lineWidth = 14;
     cxt.strokeStyle = 'green';
     cxt.lineTo(50, 50);
     cxt.lineTo(200, 200);
     cxt.stroke();
    }

    我們還可以利用CanvasGradient對象或者CanvasPattern對象給線段添加漸變色或圖案

    function drawLine(){
     cxt.lineWidth = 14;var gradient = cxt.createLinearGradient(0, 0, canvas.width/2, canvas.height/2);
     gradient.addColorStop(0, 'blue');
     gradient.addColorStop(0.5, 'purple');
     gradient.addColorStop(1, 'yellow');
     cxt.strokeStyle = gradient;
     cxt.lineTo(50, 50);
     cxt.lineTo(200, 200);
     cxt.stroke();
    }

    beginPath()與closePath()

    從上面canvas中的三種繪制方式中我們可以看出,第二行的弧形路徑是開放路徑,最后一行的弧形是封閉路徑。那么封閉的路徑是怎么實現的呢?

    下面我們來看看canvas中路徑繪制中兩個比較重要的方法

  • beginPath(): 清除當前所有子路徑,以此來重置當前路徑,重新規劃一條路徑。

  • closePath(): 用于封閉某段開放路徑。不是必需的,如果圖形是已經閉合了的,即當前點為開始點,該函數什么也不做。

  • 先繪制出一條折線

    function drawLine(){
     cxt.strokeStyle = 'green';
     cxt.lineWidth = 2;
     cxt.moveTo(50, 50);
     cxt.lineTo(50, 150);
     cxt.lineTo(150, 150);
     cxt.stroke();
    }

    修改上面例子中的代碼在代碼中添加beginPath()與closePath()方法

    cxt.strokeStyle = 'green'= 250, 5050, 150150, 150150, 250  cxt.closePath();
    }

    可以看出我們在畫布中繪制了兩條路徑

    注意:調用beginPath()之后,或者canvas剛建的時候,第一條路徑構造命令通常被視為是moveTo()。所以我們在繪制圖形的時候一定要先使用beginPath()。

    我們繼續修改我們的代碼

    function drawLine(){//描邊三角形cxt.strokeStyle = 'green';
     cxt.lineWidth = 2;
     cxt.beginPath();
     cxt.moveTo(50, 50);
     cxt.lineTo(50, 150);
     cxt.lineTo(150, 150);
     cxt.closePath();
     cxt.stroke();//折線cxt.translate(150, 0);
     cxt.strokeStyle = 'red';
     cxt.lineWidth = 2;
     cxt.beginPath();
     cxt.moveTo(50, 50);
     cxt.lineTo(50, 150);
     cxt.lineTo(150, 150);
     cxt.stroke();
     cxt.closePath();//綠色填充三角形cxt.translate(150, 0);
     cxt.fillStyle = 'green';
     cxt.lineWidth = 2;
     cxt.beginPath();
     cxt.moveTo(50, 50);
     cxt.lineTo(50, 150);
     cxt.lineTo(150, 150);
     cxt.fill();
     cxt.closePath();//紅色填充三角形cxt.translate(150, 0);
     cxt.fillStyle = 'red';
     cxt.lineWidth = 2;
     cxt.beginPath();
     cxt.moveTo(50, 50);
     cxt.lineTo(50, 150);
     cxt.lineTo(150, 150);
     cxt.closePath();
     cxt.fill();
    }

    從上面的例子我們可以看出closePath()的位置不同,也會影響我們的圖形

    注意:當你調用fill()函數時,所有沒有閉合的形狀都會自動閉合,所以此時closePath()函數不是必須的。

    但是調用stroke():如果你在stroke()方法之前只用closePath()會形成閉合路徑,如果在stroke()方法之后調用closePath()方法,此時圖形已經繪制完成,當前的繪制路徑已經關閉,所以closePath()方法不起作用。

    線段與像素邊界

    先來看一個例子

    function drawLine(){//描邊三角形cxt.lineWidth = 1;
     cxt.beginPath();
     cxt.moveTo(50, 50);
     cxt.lineTo(450, 50);
     cxt.stroke();
     cxt.beginPath();
     cxt.moveTo(50.5, 150.5);
     cxt.lineTo(450.5, 150.5);
     cxt.stroke();
    }

    從圖中我們可以看出,我們將兩條線段的lineWidth都是設置為1像素,但是上面的線段畫出的卻是兩像素。

    如果你在某2個像素的邊界處繪制一條1像素寬的線段,那么該線段實際會占據2個像素的寬度;

    因為當你在像素邊界處繪制一條1像素寬度的垂直線段時,canvas的繪圖環境對象會試著將半個像素畫在邊界中線的右邊,將另外半個像素畫在邊界中線的左邊。

    然而,在一個整像素的范圍內繪制半個像素寬的線段是不可能的,所以在左右兩個方向上的半個像素都被擴展為1個像素。

    另外一方面,繪制在兩個像素之間,這樣的話,中線左右兩端的那半個像素就不會延伸,它們結合起來恰好占據1個像素的寬度。所以說,如果要繪制一條真正1像素寬度的線段,你必須將該線段繪制在某兩個像素之間

    網格的繪制

    既然我們已經明白了如何繪制真正的1像素的線段,那我們就開始繪制網格

    function drawLine(stepx, stepy){
     cxt.lineWidth = 0.5;
     cxt.strokeStyle = 'green';//繪制豎線for(var i= stepx + 0.5; i< cxt.canvas.width; i+= stepx){
     cxt.beginPath();
     cxt.moveTo(i, 0);
     cxt.lineTo(i, cxt.canvas.height);
     cxt.stroke();
     }//繪制橫線for(var i= stepy + 0.5; i< cxt.canvas.height; i+= stepy){
     cxt.beginPath();
     cxt.moveTo(0, i);
     cxt.lineTo(cxt.canvas.width, i);
     cxt.stroke();
     }
    }
    drawLine(10, 10);

    上面例子中我們將線段繪制在兩個像素之間的像素上,而且繪制出來的線段僅有0.5像素寬,

    雖說canvas規范沒有明文規定,不過所有瀏覽器的Canvas實現都使用了“抗鋸齒”技術,以便創建出“亞像素”線段的繪制效果來

    總結

    本節內容主要講解canvas中路徑中線性路徑的繪制方法,主要是利用 moveTo()定義起點,lineTo()定義終點,stroke()描繪當前路徑。這三個方法繪制線段

    canvas中繪制路徑有兩個重要的方法,beginPath()與closePath()。繪制圖形之前先調用beginPath()是繪制多個圖形必要的步驟。

    closePath()在使用fill()時是可以省略的,而且還要注意closePath()方法的調用位置。

    繪制線段時我們可以使用 lineWidth改變線段的寬度,strokeStyle改變線段的顏色。

    弄清楚線段的像素邊界,這樣我們才能繪制出真正的1像素線寬的線段。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    如何繪制路徑-線段

    如何繪制路徑-線段:Canvas繪圖環境中有些屬于立即繪制圖形方法,有些繪圖方法是基于路徑的。立即繪制圖形方法僅有兩個strokeRect(),fillRect(),雖然strokezText(),fillText()方法也是立即繪制的,但是文本不算是圖形。基于路徑的繪制系統 大多數繪制系統,如:SVG(Scal
    推薦度:
    標簽: 如何 路徑 繪制
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 天码毛片一区二区三区入口 | 俄罗斯女人禽交zozo | 亚洲国产精品久久久久久 | 热久久伊人 | 久久九九视频 | 亚洲欧洲综合 | 免费在线国产视频 | 欧美一区二区三区视频 | 久久久久国产精品美女毛片 | 天天做天天爱夜夜爽毛片毛片 | 欧美在线视频网站 | 欧美 日韩 国产 成人 在线观看 | 欧美亚洲另类综合 | 国产日韩欧美精品在线 | 999久久久免费精品国产牛牛 | 国产剧情精品在线 | 黄网站免费在线观看 | 欧美国产日韩在线播放 | 亚洲一区免费在线观看 | 99久久精品免费国产一区二区三区 | 欧美日韩精品在线观看 | 人善交另类欧美重口另类 | 日本成人一区 | 欧美日韩高清一区二区三区 | 日本三级全黄三级a | 欧美亚洲视频一区 | 一区二区三区精品牛牛 | 免费国产在线视频 | 久久九九视频 | 久久久高清国产999尤物 | 97在线视频免费 | 国产成人青青热久免费精品 | 韩国视频网站 | 国产精品视频播放 | 国产美女精品久久久久中文 | 国产a自拍 | 一级一级一级毛片 | 日韩第三页| 成人a免费视频播放 | 国产精品亚洲精品日韩动图 | 国产在线视频在线 |