Canvas学习笔记二——图形绘制
来源:互联网 发布:php无限极分类菜单 编辑:程序博客网 时间:2024/04/28 20:37
1.矩形:
fillRect(x,y,width,height) :画一个被填满颜色的矩形
strokeRect(x,y,width,height) : 画一个矩形边框
clearRect(x,y,width,height) : 清理出一个矩形区域
三个函数的参数都是表示矩形的左上角位于( x , y ) ,宽为width,高为height.
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag. </canvas> <script> var c=document.getElementById("myCanvas"), ctx=c.getContext("2d"); ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50); </script> </body> </html>
2.线段:
ctx.beginPath();ctx.lineWidth="5";ctx.strokeStyle="red"; // 红色路径ctx.moveTo(0,75);ctx.lineTo(250,75);ctx.stroke(); // 进行绘制
1.用beginPath创建路径,如:ctx.beginPath();
2.实际绘图。
3. closePath关闭路径。
4.调用 stroke 或 fill 方法把图形绘制到 canvas 上去。stroke 是绘制图形的边框,fill 会用填充出一个实心图形。
注意:当调用 fill 时,开放的路径会自动闭合,而无须调用 closePath 。
例子:
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag. </canvas> <script> var c=document.getElementById("myCanvas"), ctx=c.getContext("2d"); ctx.beginPath(); ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle ctx.moveTo(110,75); ctx.arc(75,75,35,0,Math.PI,false); // Mouth (clockwise) ctx.moveTo(65,65); ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye ctx.moveTo(95,65); ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye ctx.stroke(); ctx.beginPath(); ctx.moveTo(40,75); ctx.lineTo(60,65); ctx.lineTo(90,65); ctx.moveTo(110,75); ctx.lineTo(125,75); ctx.stroke(); </script> </body> </html>
3.绘制弧线:
arc(x, y, radius, startAngle, endAngle, anticlockwise):
x,y圆心,radius为半径,startAngle起始弧度,endAngle结束弧度,如anticlockwise为true表示逆时针,反之须时针。
注意:弧度是以弧度为单位而不是以角度为单位。
度和弧度直接的转换可以用这个表达式:var radians = (Math.PI/180)*degrees;。
例子:
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag. < /canvas> <script> var c=document.getElementById("myCanvas"), ctx=c.getContext("2d"); ctx.beginPath(); var x = 150; var y = 150; var radius = 100; var startAngle = Math.PI; var endAngle = 0.5*Math.PI; var anticlockwise =false; ctx.arc(x,y,radius,startAngle,endAngle, anticlockwise); ctx.stroke(); </script> </body> </html>
4.贝塞尔曲线:
quadraticCurveTo(cpX, cpY, x, y):
quadraticCurveTo() 方法为当前的子路径添加一条贝塞尔曲线。这条曲线从当前点开始,到 (x,y) 结束。控制点 (cpX,cpY) 说明了这两个点之间的曲线的形状。
例子:
<!DOCTYPE html><html><body><canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;">Your browser does not support the HTML5 canvas tag.</canvas><script>var c=document.getElementById("myCanvas"), ctx=c.getContext("2d"); ctx.beginPath();ctx.moveTo(75,25);ctx.quadraticCurveTo(25,25,25,62.5);ctx.quadraticCurveTo(25,100,50,100);ctx.quadraticCurveTo(50,120,30,125);ctx.quadraticCurveTo(60,120,65,100);ctx.quadraticCurveTo(125,100,125,62.5);ctx.quadraticCurveTo(125,25,75,25); ctx.stroke();</script></body></html>
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y):
bezierCurveTo() 为一个画布的当前子路径添加一条三次贝塞尔曲线。这条曲线的开始点是画布的当前点,而结束点是 (x, y)。两条贝塞尔曲线控制点 (cpX1, cpY1) 和 (cpX2, cpY2) 定义了曲线的形状。当这个方法返回的时候,当前的位置为 (x, y)。
例子:
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag. </canvas> <script>var c=document.getElementById("myCanvas"), ctx=c.getContext("2d"); ctx.beginPath();ctx.moveTo(75,40);ctx.bezierCurveTo(75,37,70,25,50,25);ctx.bezierCurveTo(20,25,20,62.5,20,62.5);ctx.bezierCurveTo(20,80,40,102,75,120);ctx.bezierCurveTo(110,102,130,80,130,62.5);ctx.bezierCurveTo(130,62.5,130,25,100,25);ctx.bezierCurveTo(85,25,75,37,75,40); ctx.stroke(); </script> </body> </html>
5.综合例子:
<!DOCTYPE html><html><body><canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;">Your browser does not support the HTML5 canvas tag.</canvas><script> var c=document.getElementById("myCanvas"),ctx=c.getContext("2d"); function draw() { roundedRect(ctx,12,12,150,150,15); roundedRect(ctx,19,19,150,150,9); roundedRect(ctx,53,53,49,33,10); roundedRect(ctx,53,119,49,16,6); roundedRect(ctx,135,53,49,33,10); roundedRect(ctx,135,119,25,49,10); ctx.beginPath(); ctx.arc(37,37,13,Math.PI/7,-Math.PI/7,false); ctx.lineTo(31,37); ctx.fill(); for(i=0;i<8;i++){ ctx.fillRect(51+i*16,35,4,4); } for(i=0;i<6;i++){ ctx.fillRect(115,51+i*16,4,4); } for(i=0;i<8;i++){ ctx.fillRect(51+i*16,99,4,4); } ctx.beginPath(); ctx.moveTo(83,116); ctx.lineTo(83,102); ctx.bezierCurveTo(83,94,89,88,97,88); ctx.bezierCurveTo(105,88,111,94,111,102); ctx.lineTo(111,116); ctx.lineTo(106.333,111.333); ctx.lineTo(101.666,116); ctx.lineTo(97,111.333); ctx.lineTo(92.333,116); ctx.lineTo(87.666,111.333); ctx.lineTo(83,116); ctx.fill(); ctx.fillStyle = "white"; ctx.beginPath(); ctx.moveTo(91,96); ctx.bezierCurveTo(88,96,87,99,87,101); ctx.bezierCurveTo(87,103,88,106,91,106); ctx.bezierCurveTo(94,106,95,103,95,101); ctx.bezierCurveTo(95,99,94,96,91,96); ctx.moveTo(103,96); ctx.bezierCurveTo(100,96,99,99,99,101); ctx.bezierCurveTo(99,103,100,106,103,106); ctx.bezierCurveTo(106,106,107,103,107,101); ctx.bezierCurveTo(107,99,106,96,103,96); ctx.fill(); ctx.fillStyle = "black"; ctx.beginPath(); ctx.arc(101,102,2,0,Math.PI*2,true); ctx.fill(); ctx.beginPath(); ctx.arc(89,102,2,0,Math.PI*2,true); ctx.fill(); } function roundedRect(ctx,x,y,width,height,radius){ ctx.beginPath(); ctx.moveTo(x,y+radius); ctx.lineTo(x,y+height-radius); ctx.quadraticCurveTo(x,y+height,x+radius,y+height); ctx.lineTo(x+width-radius,y+height); ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius); ctx.lineTo(x+width,y+radius); ctx.quadraticCurveTo(x+width,y,x+width-radius,y); ctx.lineTo(x+radius,y); ctx.quadraticCurveTo(x,y,x,y+radius); ctx.stroke(); } draw();</script></body></html>参考于:https://developer.mozilla.org/zh-CN/docs/Canvas_tutorial
- Canvas学习笔记二——图形绘制
- 【canvas学习笔记二】绘制图形
- 自定义View学习笔记04—Canvas的绘制图形
- html5学习笔记二:利用canvas绘制简单图形
- HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一
- HTML5 学习笔记15-Canvas图形绘制处理
- canvas学习:绘制图形1(canvas尺寸)
- HTML5学习笔记14-Canvas绘制渐变图形与绘制变形图形
- HTML5之Canvas绘图——使用Canvas绘制图形
- 图形绘制之——Canvas详解(二)-Path路径使用
- OpenCV笔记(二)——基本图形的绘制
- <canvas>学习笔记——设置图形的透明度
- <canvas>学习笔记——如何给图形填充颜色
- 学习笔记——使用canvas给图形填色
- <canvas>学习笔记——绘制直线的API
- <canvas>学习笔记——绘制弧和圆
- <canvas>学习笔记——实时绘制线条摆动
- Html5学习------canvas绘制径向渐变图形
- iOS SMTP发送邮件开源项目[SKPSMTPMessage]
- LWIP netbuf netconn函数
- 调试器工作原理——基础篇
- python: https client sample
- linux MISC 驱动模型分析
- Canvas学习笔记二——图形绘制
- android布局与多屏适配---layout_weight
- python中的迭代器
- 2012年度总结
- msvcrtd.lib和libcmtd.lib冲突 (转)
- 乱漫漫其修远兮,吾将上下而求索
- 也谈大端模式(big endian)和小端模式(little endian) (二) 理论与实例一
- LINUX下一个LED驱动程序的详细分析
- spring cronexpression