HTML5Canvas2DAPI规范1.0中文版_第1页
HTML5Canvas2DAPI规范1.0中文版_第2页
HTML5Canvas2DAPI规范1.0中文版_第3页
HTML5Canvas2DAPI规范1.0中文版_第4页
HTML5Canvas2DAPI规范1.0中文版_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、W3C Canvas 2D API 规范 LOby codeEx cnCanvas 2D API 规范 1.0(W3C Editor's Draft 21 October 2009)翻译:CodeEx.CN 2010/10/21引用本文,请不要删掉翻译行/更多精彩,请访问: 原文请参看:/html5/canvas-api/ca nv as2d-api.html2介绍11. 1术语:2第#页共30页W3C Canvas 2D API 规范 LOby codeEx cn第#页共30页W3C Canvas 2D API 规范 LOby codeEx cn2 C

2、ANVAS接口元素定义32. 1GETCONTEXT ()方法32.2TODATAURL ()方法33 二维绘图上下文43. 1 CANVAS 的状态7 3. 2 转换(TRANSFORMATIONS)3.3合成(COMPOSITING) 103. 4颜色和风格123.5线风格163. 6阴影(SHADOWS)183.7简单形状(矩形)183. 8复杂形状(路径-PATHS)193.8.1路径起始函数193.8.2绘制函数1938. 3辅助方法一点是否在路径里223. 8. 4 MOVETO方法223. 8. 5LINETO方法223.8.6 RECT 方法223.8.7 圆弧233. 8.8

3、最短圆弧243. 8.9二次方、三次方贝塞尔曲线24253.9文字3. 10 绘制图片263. 11 像素级操作27第2页共30页W3C Canvas 2D API 规范 LOby codeEx cn第#页共30页W3C Canvas 2D API 规范 LOby codeEx cn283. 11. 2 GETIMAGEDATA方法283. 11.3 PUTIMAGEDATA方法283. 11. 1 CREATE IMAGEDATA方法第#页共30页W3C Canvas 2D API 规范 LOby codeEx cn第#页共30页W3C Canvas 2D API 规范 LOby codeE

4、x cn3. 11.4 演示例子283. 12 绘图模型【此段翻译不怎么样,可以参看原英文】294 参考资料29扌腰本规范定义了二维Canvas (画布)的绘画API,使用这些API使得可以 在Web页面上进行立即模式的二维图形绘制。1介绍本规范描述了立即模式的API和为了在光栅风格的绘图区域内绘制2维 矢量图形所必须的方法。其主要应用是HTML5规范定义的canvas元素。1.1术语:2D:二维,你们懂的3D:三维,你们懂的API:编程接口Canvas interface element:实现了本规范定义的绘图方法和属性的元 素,简言之,就是“canvas”元素Drawing context

5、:绘图上下文,一个左上角为(0, 0)的笛卡尔坐标平面, 在本平面中往右则x坐标增加和往下方y坐标增加Immediate-mode:立即模式,一种绘图洛式,当绘制完成后,所有的绘图 结构将从内存中立即丢弃,本API即为此种图形绘制格式Retained-mode:残留模式:另一种绘图格式,当绘制完成后,所有的绘 图结构仍在内存中残留,例如DOM、SVG即是此种绘制格式Raster:光栅风格,图形的一种风格,其由多行断开的图片(行)组成, 每行都包含确定的像素个数Vector:矢量,你们懂的source-over operator :我不懂,你们自己看吧2 Canvas接口元素定义D0M 接口:i

6、nterface CanvasElement : Element attribute unsigned long width; attribute unsigned long height;Object getContext(in DOMString context Id);DOMString toDataURL(optional in DOMString type, in any args);;这里width和height必须是非负值,并且无论什么时候重新设置了 width或height的值,画布中任何已绘对象都将被清除,如下所示的JS代 码中,仅仅最后一个矩形被绘制:/ canvas is

7、 a reference to a <canvas> elementvar context = canvas.getContext ( 12d 9);contextfillRect (0f0f50f50);canvassetAttribute ( 9 width 9 f 9300 9); / clears the canvas contextfillRect (0f 100f50f50);canvaswidth canvas.width;/ clears the canvascontextfillRect (100f 0f50f50) ;/ only this square rem

8、ains2.1 getContext()方法为了在canvas上绘制,你必须先得到一个画布上下文对象的引用,用本 方法即可完成这一操作,格式如下:context 二 canvas .get contex t(c ontextld)方法返回一个指定context Id的上下文对象,如果指定的id不被支持, 则返回null,当前唯一被强制必须支持的是“2d”,也许在将来会有“3d”, 注意,指定的id是大小写敏感的。2.2toDataURL()方法此函数,返回一张使用canvas绘制的图片,返回值符合data:URL格式, 格式如下:ur/= canvas .to DataURL( type,.)

9、规范规定,在未指定返回图片类型时,返回的图片格式必须为PNG格式, 如果canvas没有任何像素,则返回值为:“data:, ",这是最短的data:URL» 在text/plain资源中表现为空字符串。type的可以在image/png , image/jpeg, image/svg+xml 等 MIME 类型中选择。如果是 image/jpeg,可以 有第二个参数,如果第二个参数的值在0T之间,则表示JPEG的质最等级, 否则使用浏览器内置默认质量等级。下而的代码可以从ID为codeex的canvas中取得绘制内容,并作为 DataURL传递给img 元素,并显示。va

10、r canvas = document ge t El emen t By Id ( 9 codeex 9);var url = canvas.toDataURL();/i d为my img的图片元素myimg. src = url;3二维绘图上下文当使用一个canvas元素的get Cont ext ( "2d")方法时,返回的是 CanvasRender i ngCont ext 2D对象,其内部表现为笛卡尔平面坐标,并且左上 角坐标为(0, 0),在本平而中往右则x坐标增加和往下方y坐标增加。每一 个canvas元素仅有一个上下文对象。其接口如下:interface

11、CanvasRenderingcontext 2D / back-reference to the canvasreadonly attribute HTMLCanvasElement canvas;/ statevoid restore (); / pop state stack and restore statevoid save ();/ push state on state stack/ transformations (default transform is the identity matrix) void rotate (in float angle);void scale

12、(in float xz in float y);void setTransform (in float mll/ in float ml2f in float m21f in float m22f in float dxz In float dy);void transform (in float mllf in float ml2f in float m21f in float m22f in float dxf in float dy);void translate (In float xz in float: y);/ compositingattribute float global

13、Alpha; / (default 1.0)attribute DOMString globa1 CompositeOperation; / (default source-over)/ colors and stylesat: tribute any fillstyle; / (defaul t black)attribute any strokestyle; / (default black)CanvasGradient createLinearGradlent (in float xOf in float yOf In float xlf in float yl);CanvasGradi

14、ent createRadia 1Gradient (in float xOf in float yOf in float rOf in float xlf in float yl, in float rl);CanvasPattern createPattern (In HTMLImageElement 丄mage,in DOMString repetition);CanvasPattern createPattern (in HTMLCanvasElement imagef in DOMString repetition);CanvasPattern createPattern (in H

15、TMLVideoElement image. In DOMString repetition);/ line stylesattribute DOMString lineCap; / "butt uf "round"f "square99 (default "butt")attribute DOMString lineJoin; / nmiternf "round"f "beveln (default "miter")attribute float linewidth; / (defa

16、ult 1)attribute float miterLimit; / (default 10)/ shadows attribute attribute attribute attributeshadowBlur; / (default 0)floatDOMString shadowcolor; / (default float shadowOffsetX; / (default float shadowOffsetY; / (defaulttransparent black)0)0)/ rectsvoid clearRect (in float xz in float yf in floa

17、t wf in float h); void fillRect (in float xf in fl oat yf in float w. in float h); void strokeRect (in float x, in float y, in float wf in float h);/ Complex shapes (paths) APIvoid arc (in float xf in float yf in float radiusf in float startAnglef in float endAngle/ in boolean anticlockwise);void ar

18、cTo(in float xlf in float yl, in float x2f in float y2f in float radius);void beginPath ();void bezierCurveTo(in float cplx, in float cplyf in float cp2xf in float cp2yf in float x, in float y);voidclipO ;voidclosePath ();voidfill ();voidlineTo (infloat xzInfloaty);voidmove To (infloat xzinfloaty);v

19、oid qua dr a t i cCurve To (infloatcpxf infloatcPYfin float x, infloat y);void rect (in float x, InfloatY/ infloatwf infloat h);void stroke ();boolean isPointInPath (infloatxf infloaty);/ textattribute DOMString font; / (default 1Opx sans-serif)aC tribute DOMString textAlign; / "start99 f nend&

20、quot;f "left99 fnright rrz "center" (default: ustart99)attribute DOMString textBaseline; / "top J "hanging"f "middle9 nalphabeticnf n ideographic99 f "bottom " (default: alphabetic") void fillText (in DOMString text, in float xf in float yf optional

21、in float maxWidth);TextMetrics measureText (in DOMString text);void strokeText (In DOMString text, in float xf in float yf optional in float maxwidth);/ drawing imagesinfloatinfloatinfloatinfloatinfloatinfloatinfloatinfloatinfloatvoid drawlmage (in HTMLImageElement imagef in float dxf dyf optional i

22、n float dwf in float dh);void drawlmage (in HTMLImageElement imagef in float sxz syz in float swf in float shf in float dxf in float dyf dwf in float dh);void drawlmage (in HTML Can va sEl emen t image f in float dxf dyf optional in float dwf in float dh);void drawlmage (in HTMLCanvasElement imagef

23、in float sxf syf in float swf in float shf in float dxf in float dyf dw. In float dh);void drawlmage (in HTML VideoElement imagef in float dx, dy, optional in float dw, in float dh);void drawimage (in HTMLVideoElement imagef in float sxz syf in float swf in float shf in float dxf in float dyf dwf in

24、 float dh);/ pixel manipulationImageData createlmageData (in float swf in float sh);ImageData createImageData (in ImageData imagedata);ImageData getImageData(in float sxf in float syf in float swf in float sh);void putlmageData (in ImageData imagedataf in float dxf in float dyf optional in float dir

25、tyX/ in flcat dirtyY, in float dirtyWidthf In float dlrvyHelghz);;interface CanvasGradient / opaque objectvoid addColorStop (in float offset, in DOMString color); ;Interface CanvasPattern / opaque object;interface TextMetrics readonly attribute float width;interface ImageData readonly attribute Canv

26、asPixelArray data;readonly attribute unsigned long height;readonly attribute unsigned long width;interface CanvasPixelArray readonly attribute unsigned long length;getter octet (in unsigned long index);setter void (in unsigned long indexf in octet value);;3.1 canvas的状态每个上下文都包含一个绘图状态的堆,绘图状态包含下列内容:当前的

27、 trans forma t ion matrix.当前的clipping region当前的属性值:fillstyle, font, globalAlpha,globa1 CompositeOperationf lineCapf line Joinf lineWidthf miterLlmit f shadowBlur f shadowcolor f shadowOffsetX, shadowOffsetY, strokestylef textAlignf textBaseline注:当前path和当前bitmap不是绘图状态的一部分,当前path是持久 存在的,仅能被beginPathO复

28、位,当前bitmap是canvas的属性,而非绘 图上下文。context. restore() /»出堆最上面保存的绘图状态context. save()/4绘图状态堆上保存当前绘图状态绘图状态可以看作当前画面应用的所有样式和变形的一个快照。而状态 的应用则可以避免绘图代码的过度膨胀。3.2 转换(Tran sformations)当建立形状和路径时,转换矩阵被应用到其坐标上。转换的执行顺序是 严格按顺序的(注:原文是反向,经试验应该是按调用顺序的)。在做转换/变形之前先保存状态是一个良好的习惯。大多数情况下,调用 restore方法比手动恢复原先的状态要简单得多。乂,如果你是在一

29、个循环 中做位移但没有保存和恢复canvas的状态,很可能到最后会发现怎么有些 东西不见了,那是因为它很可能已经超出canvas范围以外了。context, rotate(angle)按给定的弧度旋转,按顺时针旋转rotate方法旋转的中心始终是canvas的原点,如果要改变它,需要使 用 translate 方法。context. translate (75, 75); for (var i=l;i<6;i卄) context, save();context. fillStyle='rgbC +(51*i)+',' +(255-51*i)+', 255)

30、'for (var j=0;j<i*6;j+) context, rot at e (Mat h. PI*2/(i*6);context. beginPath();context. arc(0, i*12. 5, 5, 0, Math. PI*2, true)/context, fi 11 ();context, restore();context. scale(x,y)/按给定的缩放倍率缩放,1.0,为不变参数比1.0小表示缩小,否则表示放大。默认情况下,canvas的1单 位就是1个像素。举例说,如果我们设置缩放因子是0.5, 1个单位就变 成对应0.5个像素,这样绘制出来的

31、形状就会是原先的一半。同理,设置 为2.0时,1个单位就对应变成了 2像素,绘制的结果就是图形放大了 2 倍。context, setTransform(mH. m12, m2t m22, dx, dy)重设当前的转换到context, transf orm(m77, m12, m2t m22, dx, dy)矩阵变换,结果等于当前的变形矩阵乘上mil m21 dxml2 m22 dy0 0 1后的结果Context. t rans 1 ate(X, y) /可以理解为偏移,向x,y方向偏移指定的量,其用来移动Canvas的原点到一个指定的值下而是一个利用translate方法进行绘制螺旋图案

32、的例子:/绘制螺旋图案的函数function drawSpirograph (ctxfRfr, O) var xl = R_O;var yl = 0;var 1=1;ctx. beginPath ();ctx. moveTo (xlfyl);do if (l>20000) break;var x2 = (R+r)Math.cos (iMath.Pl/72) 一 (r+O)Mathcos (R+r)/r) * (iMathPl/72)VdL y2 = (R+r).uln (1Mdth.Pl/72) 一(r+O)Math.sin(R+r)/r) * (1MaChPl/72)ctx. line

33、To (x2f y2);xl = x2;yi = y2; while (x2 != R-O && y2 != 0 );ctx. stroke ();/调用部分代码context fillRect (0f 0f 300f 300);for (var i=0; i<3; i+)for (var j=0;j<3;j+)contextsave();contextstrokestyle = 叫9CFF00u;contexttranslate (50+jl00f50+i*100);dr a wSpi rograph (context f 20 ( j+2) / (j+1), _

34、8* (:L+3) / (1+1) f 10);context restore ();3.3 合成(Compositing)在默认情况下,我们总是将一个图形画在另一个之上,但在特殊情况下, 这样是不够的。比如说,它这样受制于图形的绘制顺序。不过,我们可以利 用globalCompositeOperat ion屈性來改变这些做法context. globaiAipha = va/ue /0-1.0 之间的数据,设定图像的透明度Context, globalCompositeOperation = value 设定重叠图像的覆盖方式,可以设定为(注,值大小写敏感):注意:下而所有图例中,B(蓝色方

35、块)是先绘制的,即“己有的canvas内 容”,A(红色圆形)是后面绘制,即“新图形” osource-over(default).4 over E.这是默认设置,新图 形会覆盖在原有内容之上。destination-overB over A.会在原有内容之下绘 制新图形°source-atopA atop B.新图形中与原有内容重血的部分会被绘制,并覆盖于原 有内容之上。destination-atopB atop A原有内容中与新内容觅亮的部分会被保留,并会在原有 内容之下绘制新图形source-inA in B新图形会仅仅出现与原 有内容重叠的部分。其它区域都变 成透明的。de

36、stination-inB in A原有内容中与新图形重叠 的部分会被保留,其它区域都变成透明 的source-outA out B.结果是只有新图形中 与原有内容不重贰的部分会被绘 制出来。destination-outrB out A原有内容中与新图形 不重叠的部分会被保留。lighterA plus £两图形中重栓部分作 加色处理。darkerR两图形中重亮的部分作减色处理。*标准中没有暂无此项第11页共30页W3C Canvas 2D API 规范 LOby codeEx cncopyA (B is ignored).只右新图形 会被保留,其它都彼清除掉.xor.A xor

37、B.重叠的部分会变成透 明。vendorName-opera 11 onNameVendor-specific extensions to die List of composition operators should use this syntax3.4颜色和风格context, fiiistyie = value 返回填充形状的当前风格,能被设置以用来改变当前的填充风格,其值可以是CSS颜色字串,也可以是CanvasGradient 或者CanvasPattern对象,非法的值将被忽略。context, strokeStyle = va/uej/返回当前描绘形状的风格,能被设置,其值同上

38、。设置Javascript例子如下:context strokeStyle=n99cc33u;context fillStyle= 9 rgba (50f 0,0,0. 7) 9;contextlineWidth=l0;contextfillRect (20f20f100f 100);contextstrokeRect (20f20f 100f100);绘制的图形如下所示。上面提到的还有CanvasGradient对象,规范规定有两类渐变类型,线性 渐变和径向渐变。gradient. addcolors to p( offset colon 在给定偏移的地方增加一个渐变颜色点,偏移量取值范围为

39、Z.0之间,否则产生一个INDEX_SIZE_ERR 的异常,coloi为DOM字符串,如果不能解析,则抛出一个SYNTAX_ERR的异常 gradient = context. createLinearGradient(xO, yO,xl y1)建立一个线性渐变,如果任何一个参数不是有限值,则抛出一个NOT_SUPPORTED_ERR 的异常.gradient = context ureateRadialGradient(xO, yO,rO.xtyl r1)u建立一个径向渐变,如果任何一个参数不是有限值,则抛出一个 NOT_SUPPORTED_ERR的异常.假如rO或门为负值,贝!|抛出IN

40、DEX_SIZE_ERR 的异常。设置Javascript例子如下:var gradient =contextcreateLinearGradient (0f2f 420f2);gradient. addColorStop (0f 9rgba (200f 0,0,0.8) 9);gradient. addColorStop (0.5, 9 rgba (0f 200f 0,0.7) 9);gradient.addColorStop (lf 9rgba(200f 0, 200, 0. 9) 9); context strokeStyle=n99cc3399;contextfillStyle= gr

41、adi ent;/copyright context: llneWidth=l 0;contextfillRect (20f20, 400f 100);contextstrokeRect (20f20f 400#100);绘制的图形如下所示。更改 var gradient 二 context, createLinearGradient (0, 2, 420, 2);为 var gradient = context, createLinearGradient (0, 2, 420, 200);则绘制 图形如下:细心的读者会发现,此方法与PHOTOSHOP软件中的渐变工具类似。 注:如果XO=X1

42、, YO=Y1,则绘制动作什么也不做,自己改改例子试试吧。creat eRadial Gradient (x0, yO, rO, xl, yl, rl)方法有六个参数,前三个参 数表示开始的圆,其圆点在(x0, y0),半径为询,后三个表示结束的圆,参数 意义同上。其绘制过程如下:1. 如果起始圆和结束圆重叠,则不绘制任何东西,并终止步骤;2. x(w) = (xl-xO)w + xOy (w) = (yl-yO)w + yOr(w) = (rl-rO)w + rO在以(x(w),y(w)为圆点,r(w)为半径的圆周上所有点的颜色均为 Color(w)o3. 对于任意的w取值(-8 +oo),

43、确保r(w)>0,总是可以知道画布中 已知点的颜色,简而言之,言而总之:这个效果就是建立一个圆锥体(手电筒效果)渲 染效果,圆锥体的开始圆使用开始颜色偏移量为0,圆锥体的结束圆使 用颜色偏移量为1.0,面积外的颜色均使用透明黑。设置Javascript例子如下:var gradient =contextcreateRadialGradient (100f 100f20, 300f300 ,80);gradient. addColorStop (Of 9rgba (200f 0,0,0.8) 9);gradient.addColorStop (lf 9rgba (200f Of200f 0

44、.9) 9); context strokeStyle=n99cc33ff;context. fillStyle= gradient; / 9rgba (50f 0,0,0. 7) 9; contextlineWidth=l0;context fillRect (10f 1 0f 400, 400);contextstrokeRect (10f 10, 400f 400);绘制的图形如下所示。上面提到可以作为渲染风格还有图案对象:CanvasPattern,其调用格式 如下:pattern = context, crea tePat ternMmage repetition)本方法用捋定的图像

45、和重复方向建立一个咖布图来对象,image参数可 以为img, canvas, video元素中的任一个,如果不满足此条件,则抛出TYPE_MISMATCH_ERR异常,如果图片编码未知或没有图像数据,则抛出 INVALID STATE ERR异常;第二个参数可以是下列值:repeat默认参数,如果为空,则为此参数,表示两个 方向重复repeat-x仅水平重复repeat-y仅垂直重复no-repeat不重复如果image参数是一个HTML Image Element对象,但对象的complete属 性是false,则执行时抛出INVLAID_STATE_ERR异常;如果image参数是一个H

46、TMLV i deoE 1 ement对象,但其ready St ate属性 是 HAVE_NOTHING 或 HAVE_METADATA,则执行时抛出抛出 INVLAID_STATE_ERR 异常:如果image参数是一个HTMLCanvasE 1 ement对象,但其width属性或 height属性是0,则执行时抛出抛出INVLMD_STATE_ERR异常。图案的绘制时从左上角开始的,根据不同陥参数建行重复绘制。如果传 递的图片是动画,则选取海报或第一帧作为其绘制图案源,如果使用 HTMLVideoElement为对象,则当前播放位置帧被作为图案源。设置HTML的核心代码如下:<i

47、mg id= "psrc " src= "b. jpg " wi dth= "30"力eigh t= "30 </img><but ton onCl i ck= drawCan vas ()"绘制图形 </button><bu t ton onCl i ck= "Show ()">显示图形</bu t ton><di v><canvas id="myCanvas" width二"500"

48、; height二"500" style= border:lpx dotted U000>your browser does not support the canvas tag</canvas ></div>设置 Javascript 例子如下:var imgSrc = document.getElementByld(*psrc1)var pattern = context.creat ePattern(imgSrcf 'repeat '); context.strokeStyle=n 99cc33context:patter

49、n; /by codeex. cncontextlineWidth=l0;context. fillRect (10, 10, 200, 220);context strokeRect (10, 10, 200, 220);在IE9中的显示效果如图所示:repeat效果Repeat -y 效果Repeat-x 效果3.5线风格操作线风格的方法有4个,格式如下:context. lineCap = va/ue 返回或设置线段的箭头样式,仅有三个选项:butt(默认值),round,square淇他值忽略butt每根线的头和尾都是长方形,也 就是不做任何的处理,为默认值round每根线的头和尾都增

50、加一个半圆形的箭头square每根线的头和尾都增加一个长 方形,长度为线宽一半,高度为 钱宽三种风格的比较图,丁S代码如下context. beginPath ();contextlineCap=9butt 9;context.moveTo(100f 50);context.lineTo(250f50);contextstroke ();contextbeginPath ();contextlineCap=f round 9;context.moveTo(100, 80); ;contextlineTo(250f 80);contextstroke ();context.beginPath (

51、);contextlineCap=9square 9;context.move To(100, 110);context.lineTo(250f110);context stroke ();context, line Join 二value/返回或设置线段的连接方式,仅有三个选项:miter(默认值)jound, bevel;其他值忽略miter线段在连接处外侧延伸宜至交 于一点,为默认值,外延效果受 miterLimit的值影响,当外延交 点距离大于限制值时,则表现为 bevel风格round连接处是一个BS角,圆的半径等 于线宽bevel连接处为斜角miter styleround sty

52、le()bevel style三种风格的比较图第17页共30页W3C Canvas 2D API 规范 LOby codeEx cn第#页共30页W3C Canvas 2D API 规范 LOby codeEx cnconfexf.linewidthy value/返回或设置线段的线宽,非大于o的值被忽略;默认值为1.0;context .miterLimit = value /返回或设置线段的连接处的斜率,非大于0的值被忽略;默认值为10.0。本属性翻译不够准确,请参看英文部分线宽是指给定路径的中心到两边的粗细。换句话说就是在路径的两边各 绘制线宽的一半。因为画布的坐标并不和像素直接对应,当

53、需要获得精确的 水平或垂直线的时候要特别注意"想要获得精确的线条,必须对线条是如何描绘出來的有所理解。见下图, 用网格來代表canvas的坐标格,每一格对应屏幕上一个像素点。在第一个 图中,填充了(2,1)至(5,5)的矩形,整个区域的边界刚好落在像素边缘 上,这样就可以得到的矩形有着清晰的边缘。如果你想要绘制一条从(3,1)至IJ (3,5),宽度是1.0的线条,你会得 到像第二幅图一样的结果。实际塡充区域(深蓝色部分)仅仅延伸至路径两 旁各一半像素。而这半个像素乂会以近似的方式进行渲染,这意味着那些像 素只是部分着色,结果就是以实际笔触颜色一半色调的颜色來填充整个区域第#页共30

54、页W3C Canvas 2D API 规范 LOby codeEx cn(浅蓝和深蓝的部分)。要解决这个问题,你必须对路径施以更加精确的控制。已知粗1.0的线 条会在路径两边各延伸半像素,那么像第三幅图那样绘制从(3.5,1)到 (3.5,5)的线条,其边缘正好落在像素边界,填充出来就是准确的宽为1.0 的线条。对于那些宽度为偶数的线条,每一边的像素数都是整数,那么你想要其 路径是落在像素点之间(如那从(3,1)到(3,5)而不是在像素点的中 间。如果不是的话,端点上同样会出现半渲染的像素点。3.6 阴影(Shadows)有关阴影的四个全局属性将影响所有的绘画操作。有关定义如下:context

55、. shadowBiur = value/返回或设置阴影模糊等级,非大于等于0的值被忽略;context, shadowcolor = value II返回或设置阴影颜色context. shadowoffsetx= valuecontext, shadowof fsetY = value/返回或设置阴影的偏移量注意:上面的值均不受坐标转换的影响,可以看做是绝对值。 在上面的例子中增加下列语句,可以得到设置阴影的图像: contextshadowBlur=7;contextshadowColor=9rgb (200f 0f 0) 9;context.shadowOffsetX = 3;contextshadowOffsetY=3;nmiter stylenround )JnJ3.7简单形状(矩形)形状的绘制不影响当前路径(path),形状是剪切区域的主题,也是阴影 (Shadow)效果,全局透明(alpha),全局组合(composit ion)操作等的主题。 其由下面三个方法来进行简单的操作:Context. clearRect(X, y, W, h) 在给定的矩形内清除所有的像素 为透明黑(transparent black)context. fiiiRect(x, y, w,力)用当前的填充风格填充给定的区域Context, strokeRect(X, 丫、W, ”)/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论