亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

高程3總結(jié)#第15章使用Canvas繪圖

shusen / 2856人閱讀

摘要:使用繪圖基本用法要使用元素,必須先設(shè)置其和屬性,指定可以繪圖的區(qū)域大小。,將繪圖游標(biāo)移動(dòng)到,不畫(huà)線。,表示文本對(duì)齊方式。執(zhí)行這個(gè)變換之后,坐標(biāo)會(huì)變成之前由表示的點(diǎn)。,后繪制的圖形完全替代與之重疊的先繪制圖形。也實(shí)現(xiàn)了,但默認(rèn)是禁用的。

使用Canvas繪圖 基本用法

要使用元素,必須先設(shè)置其width和height屬性,指定可以繪圖的區(qū)域大小。出現(xiàn)在開(kāi)始和結(jié)束標(biāo)簽中的內(nèi)容是后備信息,如果瀏覽器不支持元素,就會(huì)顯示這些信息

A drawing of something

要在這塊畫(huà)布上繪圖,需要取得繪圖上下文,而取得繪圖上下文對(duì)象的引用,需要調(diào)用getContext()方法并傳入上下文的名字,傳入"2d",就可以取得2D上下文的對(duì)象

var drawing=document.getElementById("drawing");
//確定瀏覽器支持元素
if(drawing.getContext){
  var context=drawing.getContext("2d");
  //更多代碼
}

在使用元素之前,首先要檢測(cè)getContext()方法是否存在

var drawing=document.getElementById("drawing");
//確定瀏覽器支持元素
if(drawing.getContext){
  //取得圖像的數(shù)據(jù)URI
  var imgURI=drawing.toDataURL("image/png");
  //顯示圖像
  var image=document.createElement("img");
  image.src=imgURI;
  document.body.appendChild(image);
}

2D上下文

2D上下文的坐標(biāo)開(kāi)始于元素的左上角,原點(diǎn)坐標(biāo)是(0,0)。所有坐標(biāo)的值都基于這個(gè)原點(diǎn)計(jì)算,x值越大表示越靠右,y值越大表示越靠下。默認(rèn)情況下,width和height表示水平和垂直兩個(gè)方向上可用的像素?cái)?shù)目

填充和描邊

操作得結(jié)果取決于兩個(gè)屬性,fillStyle和strokeStyle

這兩個(gè)屬性的值可以是字符串,漸變對(duì)象或模擬對(duì)象,而且它們的默認(rèn)值都是"#000000"

var drawing=document.getElementById("drawing");
//確定瀏覽器支持元素
if(drawing.getContext){
  var content=drawing.getContext("2d");
  context.strokeStyle="red";
  context.fillStyle="#0000ff"
}

繪制矩形

與矩形相關(guān)的方法包括fillRect()、strokeRect()、clearRect()三個(gè)方法接收4個(gè)參數(shù),矩形的x坐標(biāo)、矩形的y坐標(biāo)、矩形的寬度和矩形的高度。這些參數(shù)的單位都是像素

fillRect()方法在畫(huà)布上繪制的矩形會(huì)填充指定的顏色

var drawing = document.getElementById("drawing");
//確定瀏覽器支持元素
if (drawing.getContext){
  var context = drawing.getContext("2d");
  // 繪制紅色矩形
  context.fillStyle = "#ff0000";
  context.fillRect(10, 10, 50, 50);
  // 繪制半透明的藍(lán)色矩形
  context.fillStyle = "rgba(0,0,255,0.5)";
  context.fillRect(30, 30, 50, 50);
}

strokeRect()方法在畫(huà)布上繪制的矩形會(huì)使用指定的顏色描邊,描邊顏色通過(guò)strokeStyle屬性指定

var drawing=document.getElementById("drawing");
//確定瀏覽器支持元素
if(drawing.getContext){
  var context=drawing.getContext("2d");
  //繪制紅色描邊矩形
  context.strokeStyle="#ff0000";
  context.strokeRect(10,10,50,50);
  //繪制半透明的藍(lán)色描邊矩形
  context.strokeStyle="rgba(0,0,255,0.5)";
  context.strokeRect(30,30,50,50)
}

clearRect()方法用于清除畫(huà)布上的矩形區(qū)域,本質(zhì)上,這個(gè)方法可以把繪制上下文中的某一矩形區(qū)域變透明

var drawing = document.getElementById("drawing");
//確定瀏覽器支持元素
if (drawing.getContext){
  var context = drawing.getContext("2d");
  //繪制紅色矩形
  context.fillStyle = "#ff0000";
  context.fillRect(10, 10, 50, 50);
  //繪制半透明的藍(lán)色矩形
  context.fillStyle = "rgba(0,0,255,0.5)";
  context.fillRect(30, 30, 50, 50);
  // 在兩個(gè)矩形重疊的地方清除一個(gè)小矩形
  context.clearRect(40, 40, 10, 10);
}

繪制路徑

要繪制路徑,首先必須調(diào)用beginPath()方法,表示要開(kāi)始繪制的新路徑

arc(x, y, radius, startAngle, endAngle, counterclockwise),以 (x,y) 為圓心繪制一條弧線,弧線半徑為 radius ,起始和結(jié)束角度(用弧度表示)分別為 startAngle 和endAngle 。最后一個(gè)參數(shù)表示 startAngle 和 endAngle 是否按逆時(shí)針?lè)较蛴?jì)算,值為 false表示按順時(shí)針?lè)较蛴?jì)算。

arcTo(x1, y1, x2, y2, radius),從上一點(diǎn)開(kāi)始繪制一條弧線,到 (x2,y2) 為止,并且以給定的半徑 radius 穿過(guò) (x1,y1) 。

bezierCurveTo(c1x, c1y, c2x, c2y, x, y),從上一點(diǎn)開(kāi)始繪制一條曲線,到 (x,y) 為止,并且以 (c1x,c1y) 和 (c2x,c2y) 為控制點(diǎn)。

lineTo(x, y),從上一點(diǎn)開(kāi)始繪制一條直線,到 (x,y) 為止。

moveTo(x, y),將繪圖游標(biāo)移動(dòng)到 (x,y) ,不畫(huà)線。

quadraticCurveTo(cx, cy, x, y),從上一點(diǎn)開(kāi)始繪制一條二次曲線,到 (x,y) 為止,并且以 (cx,cy) 作為控制點(diǎn)。

rect(x, y, width, height),從點(diǎn) (x,y) 開(kāi)始繪制一個(gè)矩形,寬度和高度分別由 width 和height 指定。這個(gè)方法繪制的是矩形路徑,而不是 strokeRect() 和 fillRect() 所繪制的獨(dú)立的形狀。

var drawing = document.getElementById("drawing");
//確定瀏覽器支持元素
if (drawing.getContext){
  var context = drawing.getContext("2d");
  // 開(kāi)始路徑
  context.beginPath();
  // 繪制外圓
  context.arc(100, 100, 99, 0, 2 * Math.PI, false);
  // 繪制內(nèi)圓
  context.moveTo(194, 100);
  context.arc(100, 100, 94, 0, 2 * Math.PI, false);
  // 繪制分針
  context.moveTo(100, 100);
  context.lineTo(100, 15);
  // 繪制時(shí)針
  context.moveTo(100, 100);
  context.lineTo(35, 100);
  // 描邊路徑
  context.stroke();
}

繪制文本

繪制文本主要兩個(gè)方法:fillText()和strokeText()。這兩個(gè)方法都可以接收4個(gè)參數(shù):要繪制的文本字符串、x坐標(biāo)、y坐標(biāo)和可選的最大像素寬度

這兩個(gè)方法以3個(gè)屬性為基礎(chǔ)

font,表示文本樣式、大小及字體,用 CSS 中指定字體的格式來(lái)指定,例如 "10px Arial" 。

textAlign,表示文本對(duì)齊方式??赡艿闹涤?"start" 、 "end" 、 "left" 、 "right" 和 "center" 。建議使用 "start" 和 "end" ,不要使用 "left" 和 "right" ,因?yàn)榍皟烧叩囊馑几€(wěn)妥,能同時(shí)適合從左到右和從右到左顯示(閱讀)的語(yǔ)言。

textBaseline,表示文本的基線??赡艿闹涤?"top" 、 "hanging" 、 "middle" 、 "alphabetic" 、"ideographic" 和 "bottom" 。

//正常
context.font = "bold 14px Arial";
context.textAlign = "center";
context.textBaseline = "middle";
context.fillText("12", 100, 20);
// 起點(diǎn)對(duì)齊
context.textAlign = "start";
context.fi llText("12", 100, 40);
// 終點(diǎn)對(duì)齊
context.textAlign = "end";
context.fi llText("12", 100, 60);

變換

修改變換矩陣

rotate(angle),圍繞原點(diǎn)旋轉(zhuǎn)圖像 angle 弧度。

scale(scaleX, scaleY),縮放圖像,在 x 方向乘以 scaleX ,在 y 方向乘以 scaleY 。 scaleX和 scaleY 的默認(rèn)值都是 1.0。

translate(x, y),將坐標(biāo)原點(diǎn)移動(dòng)到 (x,y) 。執(zhí)行這個(gè)變換之后,坐標(biāo)(0,0)會(huì)變成之前由 (x,y)表示的點(diǎn)。

transform(m1_1, m1_2, m2_1, m2_2, dx, dy),直接修改變換矩陣,方式是乘以如下矩陣。
m1_1 m1_2 dx
m2_1 m2_2 dy
0 0 1

setTransform(m1_1, m1_2, m2_1, m2_2, dx, dy),將變換矩陣重置為默認(rèn)狀態(tài),然后再調(diào)用 transform()

var drawing = document.getElementById("drawing");
//確定瀏覽器支持元素
if (drawing.getContext){
  var context = drawing.getContext("2d");
  //開(kāi)始路徑
  context.beginPath();
  //繪制外圓
  context.arc(100, 100, 99, 0, 2 * Math.PI, false);
  //繪制內(nèi)圓
  context.moveTo(194, 100);
  context.arc(100, 100, 94, 0, 2 * Math.PI, false);
  //變換原點(diǎn)
  context.translate(100, 100);
  // 旋轉(zhuǎn)表針
  context.rotate(1);
  //繪制分針
  context.moveTo(0,0);
  context.lineTo(0, -85);
  //繪制時(shí)針
  context.moveTo(0, 0);
  context.lineTo(-65, 0);
  //描邊路徑
  context.stroke();
}

繪制圖像

使用drawImage()將圖像繪制到畫(huà)布上,三種不同的參數(shù)組合

3個(gè)參數(shù):傳入HTML元素,繪制圖像的起點(diǎn)的x和y坐標(biāo)

5個(gè)參數(shù):3個(gè)參數(shù)+目標(biāo)寬度和目標(biāo)高度

9個(gè)參數(shù):要繪制的圖像,源圖像的x坐標(biāo),源圖像的y坐標(biāo),源圖像的寬度,源圖像的高度,目標(biāo)圖像的x坐標(biāo),目標(biāo)圖像的y坐標(biāo),目標(biāo)圖像的寬度,目標(biāo)圖像的高度

陰影

2D上下文根據(jù)屬性值自動(dòng)繪制陰影

shadowColor,用 CSS 顏色格式表示的陰影顏色,默認(rèn)為黑色。

shadowOffsetX,形狀或路徑 x 軸方向的陰影偏移量,默認(rèn)為 0。

shadowOffsetY,形狀或路徑 y 軸方向的陰影偏移量,默認(rèn)為 0。

shadowBlur,模糊的像素?cái)?shù),默認(rèn) 0,即不模糊。

var context = drawing.getContext("2d");
// 設(shè)置陰影
context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur = 4;
context.shadowColor = "rgba(0, 0, 0, 0.5)";
//繪制紅色矩形
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
//繪制藍(lán)色矩形
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);

漸變

要?jiǎng)?chuàng)建一個(gè)新的線性漸變,可以調(diào)用createLinearGradient()方法,這個(gè)方法接收4個(gè)參數(shù):起點(diǎn)的x坐標(biāo)、起點(diǎn)的y坐標(biāo)、終點(diǎn)的x坐標(biāo)、終點(diǎn)的y坐標(biāo)

//繪制紅色矩形
context.fillStyle="#ff0000";
context.fillRect(10,10,50,50);
//繪制漸變矩形
context.fillStyle=gradient;
context.fillRect(30,30,50,50);

模式
var image=document.images[0],
  pattern=context.createPattern(image,"repeat");
//繪制矩形
context.fillStyle=pattern;
context.fillRect(10,10,150,150);
使用圖像數(shù)據(jù)

getImageData()取得原始圖像數(shù)據(jù),這個(gè)方法接收4個(gè)參數(shù):要取得其數(shù)據(jù)的畫(huà)面區(qū)域的x和y坐標(biāo)以及該區(qū)域的像素寬度和高度

var drawing = document.getElementById("drawing");
//確定瀏覽器支持元素
if (drawing.getContext){
  var context = drawing.getContext("2d"),
      image = document.images[0],
      imageData, data,
      i, len, average,
      red, green, blue, alpha;
  //繪制原始圖像
  context.drawImage(image, 0, 0);
  //取得圖像數(shù)據(jù)
  imageData = context.getImageData(0, 0, image.width, image.height);
  data = imageData.data;
  for (i=0, len=data.length; i < len; i+=4){
    red = data[i];
    green = data[i+1];
    blue = data[i+2];
    alpha = data[i+3];
    //求得 rgb 平均值
    average = Math.floor((red + green + blue) / 3);
    //設(shè)置顏色值,透明度不變
    data[i] = average;
    data[i+1] = average;
    data[i+2] = average;
  }
  //回寫(xiě)圖像數(shù)據(jù)并顯示結(jié)果
  imageData.data = data;
  context.putImageData(imageData, 0, 0);
}

合成

應(yīng)用到2D上下文所有繪制操作得屬性。globalAlpha和globalCompositionOperation

globalAlpha是一個(gè)介于0和1之間的值,用于指定所有繪制的透明度,默認(rèn)值為0,如果所有后續(xù)操作都要基于相同的透明度,就可以先把globalAlpha設(shè)置為適當(dāng)值,然后繪制,最后再把它設(shè)置回默認(rèn)值0

//繪制紅色矩形
context.fillStyle = "#ff0000";
context.fillRect(10, 10, 50, 50);
//修改全局透明度
context.globalAlpha = 0.5;
//繪制藍(lán)色矩形
context.fillStyle = "rgba(0,0,255,1)";
context.fillRect(30, 30, 50, 50);
//重置全局透明度
context.globalAlpha = 0

globalCompositionOperation表示繪制的圖形怎樣與先繪制的圖形結(jié)合,這個(gè)屬性的值是字符串

source-over默認(rèn)值,后繪制的圖形位于先繪制的圖形上方。

source-in,后繪制的圖形與先繪制的圖形重疊的部分可見(jiàn),兩者其他部分完全透明。

source-out,后繪制的圖形與先繪制的圖形不重疊的部分可見(jiàn),先繪制的圖形完全透明。

source-atop,后繪制的圖形與先繪制的圖形重疊的部分可見(jiàn),先繪制圖形不受影響。

destination-over,后繪制的圖形位于先繪制的圖形下方,只有之前透明像素下的部分才可見(jiàn)。

destination-in,后繪制的圖形位于先繪制的圖形下方,兩者不重疊的部分完全透明。

destination-out,后繪制的圖形擦除與先繪制的圖形重疊的部分。

destination-atop,后繪制的圖形位于先繪制的圖形下方,在兩者不重疊的地方,先繪制的圖形會(huì)變透明。

lighter,后繪制的圖形與先繪制的圖形重疊部分的值相加,使該部分變亮。

copy,后繪制的圖形完全替代與之重疊的先繪制圖形。

xor,后繪制的圖形與先繪制的圖形重疊的部分執(zhí)行“異或”操作。

WebGL 類型化數(shù)組

類型化數(shù)組也是數(shù)組,只不過(guò)其元素被設(shè)置為特定類型的值

類型化數(shù)組的核心就是一個(gè)名為ArrayBuffer的類型。

WebGL上下文 支持

Firefox 4+和 Chrome 都實(shí)現(xiàn)了 WebGL API。Safari 5.1 也實(shí)現(xiàn)了 WebGL,但默認(rèn)是禁用的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108525.html

相關(guān)文章

  • HTML5 Canvas游戲開(kāi)發(fā)實(shí)戰(zhàn) PDF掃描版

    摘要:游戲開(kāi)發(fā)實(shí)戰(zhàn)主要講解使用來(lái)開(kāi)發(fā)和設(shè)計(jì)各類常見(jiàn)游戲的思路和技巧,在介紹相關(guān)特性的同時(shí),還通過(guò)游戲開(kāi)發(fā)實(shí)例深入剖析了其內(nèi)在原理,讓讀者不僅知其然,而且知其所以然。HTML5 Canvas游戲開(kāi)發(fā)實(shí)戰(zhàn)主要講解使用HTML5 Canvas來(lái)開(kāi)發(fā)和設(shè)計(jì)各類常見(jiàn)游戲的思路和技巧,在介紹HTML5 Canvas相關(guān)特性的同時(shí),還通過(guò)游戲開(kāi)發(fā)實(shí)例深入剖析了其內(nèi)在原理,讓讀者不僅知其然,而且知其所以然。在本書(shū)...

    cocopeak 評(píng)論0 收藏0
  • 高程3總結(jié)#3基本概念

    摘要:基本概念語(yǔ)法區(qū)分大小寫(xiě),中的一切變量函數(shù)名和操作符都區(qū)分大小寫(xiě)。要將一個(gè)值轉(zhuǎn)換成對(duì)應(yīng)的值,可以調(diào)用類型包括整數(shù)和浮點(diǎn)數(shù)值,基本數(shù)值字面量格式是十進(jìn)制整數(shù),除了十進(jìn)制外還有八進(jìn)制十六進(jìn)制。八進(jìn)制第一位必須是,十六進(jìn)制第一位必須是。 基本概念 語(yǔ)法 區(qū)分大小寫(xiě),ECMAScript中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫(xiě)。函數(shù)名不能使用typeof,因?yàn)樗且粋€(gè)關(guān)鍵字,但typeOf...

    Rindia 評(píng)論0 收藏0
  • 高程3總結(jié)#8BOM

    摘要:對(duì)象的核心對(duì)象是,它表示瀏覽器的一個(gè)實(shí)例。而和則表示該容器中頁(yè)面視圖區(qū)的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個(gè)參數(shù)是一個(gè)逗號(hào)分隔的設(shè)置字符串,表示在新窗口中都顯示哪些特性。這應(yīng)該是用戶打開(kāi)窗口后的第一個(gè)頁(yè)面 BOM window對(duì)象 BOM的核心對(duì)象是window,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中,window對(duì)象有雙重角色,它既是通過(guò)JavaScript訪...

    MASAILA 評(píng)論0 收藏0
  • 高程3總結(jié)#1JavaScript簡(jiǎn)介

    摘要:簡(jiǎn)介簡(jiǎn)史誕生于年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。實(shí)現(xiàn)一個(gè)完整的由三部分組成核心文檔對(duì)象模型瀏覽器對(duì)象模型就是對(duì)實(shí)現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個(gè)方面內(nèi)容的語(yǔ)言的描述。把整個(gè)頁(yè)面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。由萬(wàn)維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡(jiǎn)介 JavaScript簡(jiǎn)史 JavaScript誕生于1995年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。 如果沒(méi)有表單驗(yàn)證的功能,填入信息之...

    betacat 評(píng)論0 收藏0
  • 高程3總結(jié)#11DOM擴(kuò)展

    摘要:操作類名時(shí)可以通過(guò)屬性添加刪除和替換類名。如果將可選的參數(shù)設(shè)置為,則表示盡量將元素顯示在視口中部垂直方向。將元素的內(nèi)容滾動(dòng)指定的頁(yè)面高度,具體高度由元素的高度決定。 DOM擴(kuò)展 選擇符API querySelector()方法 querySelector()方法接收一個(gè)CSS選擇符,返回與該模式匹配的第一個(gè)元素,如果沒(méi)有找到匹配的元素,返回null //取得body元素 var b...

    cucumber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<