请选择 进入手机版 | 继续访问电脑版

HTML5星空

HTML5星空 首页 HTML5教程 Canvas 查看内容

HTML5 Canvas裁剪clip()

2013-12-15 18:51| 发布者: admin| 查看: 5331| 评论: 0

摘要: 裁剪(即clip())是渲染上下文中的绘制方法之一。很多人都以为这是一个清除概念,其实是错的。虽然从表现上看像清除,但是由于剪切区域由绘图路径设定,因此这是一个独立的显示区域。在Canvas动画中,裁剪区域之外的 ...
裁剪(即clip())是渲染上下文中的绘制方法之一。很多人都以为这是一个清除概念,其实是错的。虽然从表现上看像清除,但是由于剪切区域由绘图路径设定,因此这是一个独立的显示区域。

在Canvas动画中,裁剪区域之外的动画不受影响,平时在处理图像时经常会遇到这种需求。与之类似的有一些算法,如脏矩阵算法等。
clip()方法通过计算所有的子路径来建立新的剪切区域,未闭合的子路径在填充区按照闭合方式填充,但并不影响实际的子路径集合,新的剪切区域将替换当前的剪切区域。剪切区域可以是任何可以绘制的轮廓形状。所以,裁剪路径其实就是绘图路径,只不过这个路径不是拿来绘图的,
而是设定显示区域和遮挡区域的一个分界线。如果你熟悉Flash的话,这有点类似于Flash的遮罩。

下面请看一个例子,代码如下:
<canvas id="mycanvas" width="500" height="500" style="border:1px #000 solid;">
</canvas>
<script type="text/javascript">
setInterval(function(){
var mycanvas = document.getElementById('mycanvas');
var ctx=mycanvas.getContext('2d');
ctx.fillRect(0,0,500,500); //填充区的大小为500×500
ctx.save();
ctx.translate(250,250); //将当前坐标移动到(250, 250)位置上
ctx.beginPath(); //拟定路径
ctx.arc(0,0,200,0,Math.PI*2,true);//画出一个半径为200的圆
ctx.clip(); //裁剪上面的圆
//对裁剪区域进行加样式处理
var linearGradient = ctx.createLinearGradient(0,-300,0,250);//设定起始点
linearGradient.addColorStop(0, '#FF0000'); //渐变色0
linearGradient.addColorStop(1, '#004080'); //渐变色1
ctx.fillStyle = linearGradient;
ctx.fillRect(-250,0,500,500); //裁剪的重要一步,由于上面已经开始了tanslate,
//因此这里需要调整到-250
for(var j=1;j<250;j++){ //生成的粒子的密度
ctx.save();
ctx.fillStyle = '#FFFF00';
ctx.translate(250-Math.floor(Math.random()*500),
250-Math.floor(Math.random()*500));
drawParticl(ctx,Math.floor(Math.random()*10)); //粒子生成
ctx.restore();
}
ctx.restore();
},100);
function drawPartical(ctx,r){ //画粒子
ctx.save();
ctx.beginPath()
ctx.moveTo(r,0);
for(var i=0;i<10;i++){
ctx.rotate(Math.PI/Math.random()*20); //旋转图形,这是生成图形的关键
ctx.lineTo(r,0);
}
ctx.closePath();
ctx.fill();
ctx.restore();
}
</script>

没有裁剪时的执行结果见下图:




只有一个圆形裁剪区时的执行结果见下图:





鲜花

握手

雷人

路过

鸡蛋

相关阅读

快讯

     京ICP备14042305号

html5star team © 2012-2013 html5星空 Comsenz Inc.

GMT+8, 2020-4-9 01:46 , Processed in 0.083940 second(s), 29 queries .

返回顶部