Canvas和硬件加速
在学习canvas时,建议读者阅读这篇文章《硬件加速下的图形显示对比》,这篇文章中对比了HTML5下canvas在各浏览器下的渲染表现。在早期的浏览器中,所有对图形的显示运算都是有CPU去实现的,而随着互联网的快速发展,对图形处理的要求越来越高,于是很多的图形渲染工作都由图形处理单元(GPU)去处理了,比如使用Direct2D或者DirectWrite。当图形处理工作大部分交由GPU去处理时,大大减轻了CPU的工作负担,可以腾出来做其他更复杂的工作。
Javascript一直被指责在处理图形方面逊色,但随着FireFox,Chrome等浏览器的大行其道,还有IE 9的新的Javascript引擎Chara,它采用在后台与IE并行并且独立的CPU内核中编译 JavaScript 脚本,采用单独的后台线程进行编译。采用这种方法,可以充分利用现在的多核处理器功能。开发人员可以不用更改任何现有的代码即可利用现有计算机硬件的带来的性能提升。
因此,有了浏览器在GPU方面的加速功能,就能为HTML5的canvas的使用提供很好的环境。
当向canvas发出绘画命令时,浏览器直接将指令发到图形加速器而不需要开发者更多的干预,硬件图形加速器则以难以置信的运算速度实时绘画和渲染图形。可以通过阅读下文来了解更多的在不同浏览器之间的硬件加速测试的具体情况(地址:http://ie.microsoft.com/testdrive/Performance/Paintball/Default.html)
Canvas 2D API
canvas 2D API对象允许开发者绘制各种图片和图形。调用时,需要通过getContext方法获得其上下文,这个方法中有一个参数,目前是2d,调用的代码如下:
var context = myCanvas.getContext(“2d”);
由于每一个canvas元素都有自己的上下文context,因此如果一个页面中有多个canvas的话,必须对每一个canvas都按上面的方法获得其context。除此之外,canvas api有如下的若干重要方法:
形状变换类的方法
• scale –允许对当前canvas对象进行形状大小变换
• rotate –允许对当前的canvas对象绕 x轴和y轴旋转。
状态变换类方法
• save – 保存当前canvas的状态
• restore –恢复上一个已保存的canvas的状态
文字类方法
• font –设置或获得当前canvas的字体
• fillText –向当前canvas填充文字
• measureText –获得指定文字的宽度
更多的关于canvas 2D API的用法,可以参考这个页面http://msdn.microsoft.com/en-us/library/ff975057.aspx)。下面,我们开始学习如何使用这些API去绘制图形。
绘制形状和颜色
首先,学习下如何画矩形,下面是相关的方法:
1) fillRect(x, y, w, h),使用当前样式去绘制一个矩形并对其进行填充,其中x,y,w,h分别是X,Y坐标和宽度高度坐标。
2)strokeRect(x, y, w, h),使用当前的轮廓样式去勾画一个矩形,注意这里是用线条去勾画,而不是去填充一个矩形。
3)clearRect(x, y, w, h),在当前的画布中清除矩形的内容。
画矩形最简单的方法是用fillRect方法了,如下代码:
var context = canvas.getContext(“2d”);
context.fillRect(5, 5, 145, 145);
则在X=5,Y=5的坐标系中画出一个145*145的矩形,如下图:
▲