欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > canvas學習總結三之繪制路徑-線段

canvas學習總結三之繪制路徑-線段

熱門標簽:高德地圖標注商戶怎么標 ok電銷機器人 如何查看地圖標注 欣鼎電銷機器人 效果 黃石ai電銷機器人呼叫中心 地圖標注軟件打印出來 惡搞電話機器人 電話機器人技術 智能電銷機器人被禁用了么

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()方法

function drawLine(){
    //描邊三角形
    cxt.strokeStyle = 'green';
    cxt.lineWidth = 2;
    cxt.beginPath();
    cxt.moveTo(50, 50);
    cxt.lineTo(50, 150);
    cxt.stroke();
    cxt.beginPath();
    cxt.lineTo(150, 150);
    cxt.lineTo(150, 250);
    cxt.stroke();
  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像素線寬的線段。

對canvas繪制圖形感興趣的同學,請持續關注后續更新,如有不對的地方也請指出并多多交流。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:盤錦 阿壩 萍鄉 金昌 中山 赤峰 聊城 綏化

巨人網絡通訊聲明:本文標題《canvas學習總結三之繪制路徑-線段》,本文關鍵詞  canvas,學習,總結,三之,繪制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《canvas學習總結三之繪制路徑-線段》相關的同類信息!
  • 本頁收集關于canvas學習總結三之繪制路徑-線段的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲成人一区二区在线观看| 法国伦理少妇愉情| 欧美人禽zoz0强交| 国产色产综合色产在线视频 | 成人精品免费看| 亚洲图片第一页| 久久久亚洲国产美女国产盗摄 | 亚洲av成人片色在线观看高潮| 在线免费不卡视频| 亚洲精选一二三| 97aⅴ精品视频一二三区| 国产极品国产极品| 综合色天天鬼久久鬼色| 99这里只有精品| 色综合色综合色综合| 中文字幕字幕中文在线中不卡视频| 成人午夜激情在线| 91麻豆精品久久毛片一级| 国产亚洲精品资源在线26u| 国产呦萝稀缺另类资源| 亚洲成av人影院在线观看网| 91免费观看国产| 欧美在线色视频| 亚洲自拍欧美精品| 欧美一级片黄色| 日韩一区二区三免费高清| 蜜桃av噜噜一区| 免费在线观看a视频| 欧美激情一二三区| av男人天堂一区| 欧美日韩免费视频| 天天综合日日夜夜精品| 手机av免费看| 久久综合色播五月| 成人美女在线视频| 欧美三级三级三级| 日本网站在线观看一区二区三区| 中文在线一区二区三区| 久久久综合九色合综国产精品| 国产99久久久国产精品潘金| 在线免费观看亚洲视频| 亚洲一区二区三区美女| 野花社区视频在线观看| 国产人成一区二区三区影院| av激情综合网| 日韩视频123| 高清国产午夜精品久久久久久| 一本大道久久a久久综合婷婷| 亚洲大片一区二区三区| 自拍偷拍视频亚洲| 亚洲欧洲99久久| 国产又黄又粗又猛又爽的视频| 久久女同性恋中文字幕| av成人免费在线| 日韩一级片网址| 国产成人自拍网| 欧美日韩五月天| 国产一区中文字幕| 欧美日韩国产天堂| 精品一区二区日韩| 在线观看免费亚洲| 精品一区二区三区在线播放视频| 色综合天天综合| 日本人妖一区二区| 国产人妻精品一区二区三区不卡| 丝瓜av网站精品一区二区| 色偷偷www8888| 亚洲aⅴ怡春院| 三级在线观看免费大全| 天天色综合天天| 午夜国产福利一区二区| 日韩精品电影在线观看| 久久久久久久久久网站| 青椒成人免费视频| 91国内精品野花午夜精品| 蜜桃视频在线一区| 欧洲精品在线观看| 国产一区二区三区久久悠悠色av| 欧美日韩一卡二卡三卡| 国产综合色视频| 制服丝袜激情欧洲亚洲| 成人影视亚洲图片在线| 精品国产乱码久久久久久闺蜜| 99re这里只有精品首页| 国产亚洲成年网址在线观看| 香蕉久久久久久av成人| 国产精品乱码妇女bbbb| 亚洲欧美日本一区| 亚洲精品成人a在线观看| www.日本高清视频| 日本欧美加勒比视频| 欧美最猛黑人xxxxx猛交| 久草中文综合在线| 7777精品伊人久久久大香线蕉经典版下载 | 添女人荫蒂视频| 亚洲自拍与偷拍| 黄视频网站免费看| 国内精品视频666| 日韩欧美国产一区二区三区| 精品人妻一区二区乱码| 制服 丝袜 综合 日韩 欧美| 五月天欧美精品| 欧美日韩一区二区三区在线| 成人av影院在线| 国产婷婷色一区二区三区四区| 国产免费看av| 日韩国产欧美在线播放| 欧美三级电影网| 97久久精品人人澡人人爽| 日本一区二区成人| 极品尤物一区二区| 精品亚洲国内自在自线福利| 日韩女优制服丝袜电影| chinese麻豆新拍video| 亚洲成a天堂v人片| 欧美日本一区二区三区四区| 人妻激情偷乱视频一区二区三区| 亚洲日本va在线观看| 日韩视频中文字幕在线观看| 国产成人精品免费网站| 国产精品无圣光一区二区| www.涩涩爱| 国产最新精品免费| 国产亚洲一区二区三区四区| 女人黄色一级片| 国产一区 二区 三区一级| 国产亚洲欧美一区在线观看| 国产aaaaaaaaa| 国产寡妇亲子伦一区二区| 国产女主播在线一区二区| 美国美女黄色片| 国产精品一品二品| 国产欧美一区二区精品性色| 五月天免费网站| 粉嫩绯色av一区二区在线观看| 中文字幕成人av| 色婷婷综合久久久久中文 | 在线亚洲一区二区| 日本xxxx免费| 日韩中文字幕亚洲一区二区va在线 | 国产成人亚洲综合a∨婷婷图片| 国产日韩亚洲欧美综合| 中国美女黄色一级片| 成人免费高清在线| 亚洲女与黑人做爰| 欧美日韩国产一级片| 精品无码在线视频| 激情综合网最新| 国产精品色眯眯| 在线一区二区三区四区| 精品人妻在线视频| 日本麻豆一区二区三区视频| 精品粉嫩aⅴ一区二区三区四区| 国产日韩精品中文字无码| 国产成人免费视频一区| 亚洲欧美日韩中文播放| 欧美日本一区二区在线观看| www.av欧美| 成人av在线资源| 亚洲电影欧美电影有声小说| 欧美成人一区二区三区在线观看| av片在线免费看| www.在线欧美| 亚洲va中文字幕| 久久久www成人免费无遮挡大片| 久久人妻无码aⅴ毛片a片app| 亚洲午夜精品在线观看| 日韩 欧美一区二区三区| 久久精品欧美一区二区三区麻豆| 天天操夜夜操av| 亚洲欧洲日韩综合| 免费看精品久久片| 国产精品日日摸夜夜摸av| 欧美美女bb生活片| 免费成人深夜天涯网站| 99re热视频这里只精品| 日韩精品福利网| 国产精品久久三区| 91精品国产综合久久香蕉的特点| 人人人妻人人澡人人爽欧美一区| 成人教育av在线| 免费在线欧美视频| 中文字幕在线不卡一区| 欧美一二三四在线| 午夜爱爱毛片xxxx视频免费看| 国产精品九九视频| 国产aⅴ精品一区二区三区色成熟| 一区二区理论电影在线观看| 久久综合色天天久久综合图片| 在线观看一区二区精品视频| 69精品无码成人久久久久久| 男男受被啪到高潮自述| 国产美女在线观看一区| 亚洲国产精品影院| 国产精品免费aⅴ片在线观看| 666欧美在线视频| a级片在线观看免费| 日韩av在线看免费观看| 国产精品熟女一区二区不卡| 国内欧美视频一区二区|