0
我想繪製多剪裁區域的區域。如何在html5中組合多個裁剪區域2d canvas畫圖
這裏是屏幕截圖:
我寫的描繪示例:http://jsfiddle.net/younyzhU/zR9hg/1/
總面積應該是四個面積+白色中心矩形。
從基本教程中,我知道繪製剪貼平面就像繪製別人的東西。
- 創建剪貼區域
- context.clip()
然而,創建剪貼區域,我們具有多區域,如何組合,任何建議? 謝謝。
下面是一些代碼:
ctx.save(); // save the context so we don't mess up others
ctx.beginPath();
ctx.fillStyle = "#ffffff";
ctx.rect(this.x, this.y, this.w, this.h);
ctx.fill();
ctx.restore(); // restore context to what it was on entry
ctx.fillStyle = "#00ff00";//Color for four surrounded area.
ctx.save(); // save the context so we don't mess up others
ctx.beginPath();
r = Math.sqrt((this.h/2)*(this.h/2) + 16 *this.w * this.w);
thea = Math.atan(this.h/this.w/8);
ctx.arc(this.x + this.w*4, this.y + this.h/2, r , Math.PI - thea, Math.PI+thea, false);
ctx.closePath();
ctx.fill();
//ctx.clip();
ctx.restore(); // restore context to what it was on entry
ctx.save(); // save the context so we don't mess up others
ctx.beginPath();
r = Math.sqrt((this.h/2)*(this.h/2) + 16 *this.w * this.w);
thea = Math.atan(this.h/this.w/8);
ctx.arc(this.x- this.w*3, this.y + this.h/2, r , -thea, thea, false);
ctx.closePath();
ctx.fill();
//ctx.clip();
ctx.restore(); // restore context to what it was on entry
ctx.save(); // save the context so we don't mess up others
ctx.beginPath();
r = Math.sqrt((this.w/2)*(this.w/2) + 16 * this.h * this.h);
thea = Math.atan(this.w/this.h/8);
ctx.arc(this.x + this.w/2, this.y + 4 * this.h, r , Math.PI*3/2-thea, Math.PI*3/2 + thea, false);
ctx.closePath();
ctx.fill();
ctx.restore(); // restore context to what it was on entry
ctx.save(); // save the context so we don't mess up others
ctx.beginPath();
r = Math.sqrt((this.w/2)*(this.w/2) + 16*this.h*this.h);
thea = Math.atan(this.w/this.h/8);
ctx.arc(this.x + this.w/2, this.y-3*this.h , r , Math.PI/2-thea, Math.PI/2 + thea, false);
ctx.closePath();
ctx.fill();
ctx.restore(); // restore context to what it was on entry
ctx.save();
謝謝,創建一個剪輯區域只是結合一條路徑?好吧,我想我可以使用多路徑組合。再次感謝。 – yongnan
是的,剪切路徑總是隻有一條路徑。但是,您可以在單一路徑中組合儘可能多的繪圖命令。 ;-) – markE