首页 > 代码库 > 6月6号=》80页-100页

6月6号=》80页-100页

4.1  使用canvas元素

      HTML5新增了一个<canvas>元素,该元素专门用于绘制图形。但实际上,<canvas>元素自身并

      不会绘制图形,它只是相当于一张空画布。如果开发者需要向<canvas>上绘制图形,则必须使用JavaScript

      脚本进行绘制。

      <canvas>元素可以指定如下两个属性。

        height:该属性设置该画布组件的高度。

        width:该属性设置该画布组件的宽度。

      为了在<canvas>元素上绘图,必须经过如下3步:

        (1):获取<canvas>元素对应的DOM对象,这是一个Canvas对象。

        (2):调用Canvas对象的getContext(String contextID)该方法返回一个绘图API,该方法需要一个字符串

            参数,目前该方法只支持"2d"字符串作为参数,该方法返回一个CanvasRenderingContext2D对象。

        (3):调用CanvasRenderingContext2D对象的方法绘图。

      为了在<canvas>元素上使用路径,必须经过如下4步:

        (1):调用CanvasRenderingContext2D对象的beginPath()方法开始定义路径。

        (2):调用CanvasRenderingContext2D的各种方法添加子路径。

        (3):调用CanvasRenderingContext2D的closePath()方法关闭路径。

        (4):调用CanvasRenderingContext2D的fill()或stroke()方法来填充路径或绘制路径边框。

 

4.2  绘图

  4.2.1  canvas绘图基础:CanvasRenderingContext2D

      HTML5绘图的组件是Canvas对象,但绘图的核心API是CanvasRenderingCOntext2D。

      该对象提供了如下所示的方法绘制各种图形:

 

方法签名 简要说明
void arc(float x,float y,float radius,float startAngle,float endAngle,boolean counterclockwise) 向Canvas的当前路径上添加一段弧。绘制以x、y为圆心,radius为半径,从startAngle角度开始,到endAngle角度结束的圆弧。startAngle、endAngle以弧度作为单位
void arcTo(float x1,float y1,float x2,float y2,float radius)

向Canvas的当前路径上添加一段弧。与前一个方法相比,只是定义弧的方式不同

void beginPath() 开始定义路径
void closePath() 关闭前面定义的路径
void bezierCurveTo(float cpX1,float cpY1,float cpX2,float cpY2,float x,float y)

向Canvas的当前路径上添加一段贝济埃曲线

void clearRect(float x,float y,float width,float height) 擦除指定矩形区域上绘制的图形
void clip() 从画布上剪裁一块出来
CanvasGradient createLinearGradient(float xStart,float yStart,float xEnd,float yEnd) 创建一个线性渐变
CanvasPattern createPattern(Image image,String style) 创建一个图形平铺

CanvasGradient createRadialGradient(float xStart,float yStartfloat radiusStart,

float xEnd,float yEnd,float radiusEnd)

创建一个圆形渐变

void drawImage(Image image,float x,float y)

把image绘制到x、y处。该方法不会对图片做任何缩放处理,绘制出来的图片保持原来的大小。

 void drawImage(Image image,float x,float y,float width,float height)

把image绘制到x、y处。该方法会对图片进行缩放,绘制出来的图片宽为width,高为height。

void drawImage(Image image,integer sx,integer sy,ineger sw,integer sh,float dx,float dy,float dw,float dh)

该方法将会从image上"挖出"一块来绘制到Canvas上。其中sx、sy两个参数控制从源图片上的哪个位置开始挖取,sw、sh两个参数控制从源图片上挖取的宽度、高度;dx、dy两个参数控制把挖取的图片绘制到Canvas的哪个位置,而dw、dh则控制对绘制图片进行缩放,绘制出来的图宽为dw,高为dh。
void fill() 填充Canvas的当前路径
void fillRect(float x,float y,float width,float height) 填充一个矩形区域
void fileText(String text,float x,float y,[float max Width]) 填充字符串
void lineTo(float x,float y)

把Canvas的当前路径从当前结束点连接到x、y对应的点

void moveTo(float x,float y)

把Canvas的当前路径的结束点移动到x、y对应的点

void quadraticCurveTo(float cpX,float cpY,float x,float y) 向Canvas的当前路径上添加一段二次曲线,其中cpX、cpY、定义控制点的坐标。
void rect(float x,float y,float width,float height) 向Canvas的当前路径上添加一个矩形
void stroke() 沿着Canvas的当前路径绘制边框
void strokeRect(float x,float y,float width,float height) 绘制一个矩形边框
void strokeText(String text,float x,float y,[float maxWidth]) 绘制字符串的边框
void save() 保存当前的绘图状态。save()方法保存的绘图状态,不仅包括当前坐标系统的状态,也包括CanvasRenderingContext2D所设置的填充风格、线条风格、阴影风格的各种绘图状态。单save()方法不会保存当前Canvas上绘制的图形。
void restore() 恢复之前保存的绘图状态
void rotate(float angle) 旋转坐标系统。该方法控制系统旋转angle弧度。在旋转后的坐标系统上绘制图形时,所有坐标点的X、Y坐标都相当于旋转了angle弧度之后的坐标。
void scale(float sx,float sy) 缩放坐标系统。该方法控制坐标系统水平方向上缩放sx,垂直方向上缩放sy。在缩放后的坐标系统上绘制图形时,所有坐标点的X坐标都相当于乘以了sx因子,所有点的Y坐标都相当于乘以了sy因子。
void translate(float dx,float dy)

平移坐标系统。该方法相当于把原来位于(0,0)位置的坐标原点平移到(dx,dy)点。在平移后的坐标系统上绘制图形时,所有坐标点的X坐标都相当于增加了dx,所有点的Y坐标都相当于增加了dy。

 void transform(m11,m12,m21,m22,dx,dy)

这是一个基于矩阵变换的方法。其中前4个参数将组成变换矩阵;dx、dy将负责对坐标系统进行平移。变换前每个点(x,y)与该矩阵相乘后得到变换后该点的坐标。

 

提示:通过transform()方法进行坐标变换比较复杂。使用前3个方法就可以完成的坐标变换,就没有必要使用transform()来进行坐标变换了。 

 

      该对象提供了如下属性:

 

属性名 简要说明
fillStyle

设置填充路径时所用的填充风格。该属性支持3种类型的值:

1:符合颜色格式的字符串值,表明使用纯色填充。

2:CanvasGradient,表明使用渐变填充。

3:CanvasPattern,表明使用位图填充。

strokeStyle

设置绘制路径时所用的填充风格。该属性支持3种类型的值:

1:符合颜色格式的字符串值,表明使用纯色填充。

2:CanvasGradient,表明使用渐变填充。

3:CanvasPattern,表明使用位图填充。

font 设置绘制字符串时所用的字体 
globalAlpha 设置全局透明度 
globalCompositeOperation

设置全局的叠加效果 

lineCap

设置线段端点的绘制形状。该属性支持如下3个值:

1:"butt",该属性值指定不绘制端点。线条结尾处直接结束。这是默认的属性值

2:"round",该属性值指定绘制圆形端点。线条结尾处绘制一个直径为线条宽度的半圆

3:"square",该属性值指定绘制方形端点。线条结尾处绘制半个边长为线条宽度的正方形。需要说明的是,这种形状的端点与"butt"形状的端点十分相似,只是采用这种形式的端点的线路略长一点而已 

lineJoin

设置线条连接点的风格。该属性支持如下3个值:

1:"meter",这是默认的属性值。该方格的连接点形状如(右锐角箭头[偏长])

2:"round",该方格的连接点形状如(右锐角箭头[偏中])

3:"bevel",该方格的连接点形状如(右锐角箭头[偏短]) 

miterLimit 当把lineJoin属性设为meter风格时,该属性控制锐角箭头的长度 
lineWidth 设置笔触线条的宽度 

shadowBlur

设置阴影的模糊度。该属性值是一个浮点数,该数值越大,阴影的模糊程度就越大。

shadowColor

设置阴影的颜色 
shadowOffsetX 设置阴影在X方向的偏移 
shadowOffsetY 设置阴影在Y方向的偏移 
textAlign 设置绘制字符串的水平对齐方式,该属性支持start、end、left、right、center等属性值 
textBaseAlign

设置绘制字符串的垂直对齐方式,该属性支持top、hanging、middle、alphabetic、idecgraphic、buttom等属性值 

 

4.4  控制叠加风格

      Canvas对象绘制的图形可以形成"叠加"效果,在默认情况下,后面绘制的图形将会完全覆盖前面

      绘制的图形。这种情况能解决大部分的绘制情况,但在某些特殊情况下,我们还需要其他的叠加风格,

      这可通过修改CanvasRenderingContext2D的globalCompositeOperation属性来实现。

      该属性支持如下几个属性值:

        source-over:新绘制的图形将会显示在顶层,覆盖以前绘制的图形。这是默认的行为。

        destination-over:新绘制的图形将放在原图形的后面。

        source-in:新绘制的图形与原图形做in运算,只显示新图形与原图形重叠的部分,新图形

              与原图形的其他部分都变成透明的。

        destination-in:原图形与新绘制的图形做in运算,只显示原图形与新图形重叠的部分,新

                图形与原图形的其他部分都变成透明的。

        source-out:新绘制的图形与原图形做out运算,只显示新图像与原图形不重叠的部分,新

               图形与原图形的其他部分都变成透明的。

        destination-out:原图形与新绘制的图形做out运算,只显示原图形与新图像不重叠的部分,

                  新图形与原图形的其他部分都变成透明的。

        source-atop:只绘制新图像与原图形重叠部分和原图形未被覆盖的部分。新图形的其他部分

               变成透明的。

        destination-atop:智慧值原图形与新图形重叠部分和新图形未重叠的部分。原图形的其他

                  部分变成透明的。不绘制新图形的重叠部分。

        lighter:新图形和原图形都绘制。重叠部分绘制两种颜色值相加的颜色。

        xor:绘制新图形与原图形不重叠部分,重叠部分变成透明的。

        copy:只绘制新图形。原图形变成透明的。