canvas复习总结(一)

最近一段时间一直在做echarts绘图方面的东西,对canvas非常感兴趣,但是原生的接口也忘得差不多了,在此总结整理下。

width and height

canvas的width和height属性是画布实际宽度和高度,我们在这个上面绘制的图形。如果没有设置,默认为width:300px,height:150px。而canvas的style的width和height是canvas在浏览器中被渲染的高度和宽度。

高分屏下变模糊的处理

canvas是位图,所以无法缩放保持不变形。在如mac上,浏览器就会以2个像素点的宽度来渲染一个像素,canvas在Retina屏幕下相当于占据了2倍的空间,因此变得模糊。因此,要做Retina屏适配,关键是知道当前canvas的实际渲染倍率,然后将canvas放大到该倍率来绘制,最后将canvas压缩成一倍的物理大小来展示。canvas中的线条大小、文字大小等都需要乘以该倍率来进行绘制。

  • 实际渲染倍率的计算
ratio = window.devicePixelRatio / (context.backingStoreRatio || 1);
复制代码
  • 缩放canvas
canvas.style.width = canvas.width + 'px';  

canvas.style.height = canvas.height + 'px';

canvas.width = canvas.width * ratio;  

canvas.height = canvas.height * ratio;
复制代码

注意style上一定要加单位,不然你会看到惊喜。

渲染上下文

getContext('2d')
getContext('webgl')
//目前浏览器未实现
getContext('webgl2')
复制代码

栅格 and 坐标空间

栅格的起点为左上角(坐标为(0,0))

矩形

x与y指定了在canvas画布上所绘制的矩形的左上角(相对于原点)的坐标。width和height设置矩形的尺寸。

  • fillRect
  • strokeRect
  • clearRect
  • rect (属于路径范畴)
fillRect(x, y, width, height)
绘制一个填充的矩形

strokeRect(x, y, width, height)
绘制一个矩形的边框

clearRect(x, y, width, height)
清除指定矩形区域,让清除部分完全透明

rect(x, y, width, height)
将一个矩形路径增加到当前路径上,执行后moveTo()方法自动设置坐标参数为(0,0)
复制代码

rect与其他不同的是rect是路径,二其他的都可以直接在canvas上绘制出来。

路径

  • beginPath
  • closePath
beginPath()
新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径。
closePath()
闭合路径之后图形绘制命令又重新指向到上下文中。
这个方法会通过绘制一条从当前点到开始点的直线来闭合图形。
复制代码

当我们在调用fill时会自动闭合路径,stroke不会闭合。

第二张图片中,绘制圆形前没有使用beginpath的函数,因此stroke时会连起来。

移动笔触
  • moveTo(x,y) 移动当前画笔位置
线
  • lineTo(x,y)
圆弧
  • arc(x, y, radius, startAngle, endAngle, anticlockwise)

画一个以(x,y)为圆心的以radius为半径的圆弧(圆),从startAngle开始到endAngle结束,按照anticlockwise给定的方向(默认为顺时针)来生成。Angle单位是弧度。

二次贝塞尔曲线及三次贝塞尔曲线
quadraticCurveTo(cp1x, cp1y, x, y)
绘制二次贝塞尔曲线,cp1x,cp1y为一个控制点,x,y为结束点。
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
绘制三次贝塞尔曲线,cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。
复制代码

红色点为控制点,蓝色为起始点和终点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值