我需要画一个矩形减去一个圆。如果无法进行圆形剪裁,则多边形剪裁区域可能足以满足我的需要。
如何为 HTML5 Canvas 设置自定义剪辑区域?
我需要画一个矩形减去一个圆。如果无法进行圆形剪裁,则多边形剪裁区域可能足以满足我的需要。
如何为 HTML5 Canvas 设置自定义剪辑区域?
您应该阅读Canvas 教程中的合成,它解释了如何绘制一个矩形减去一个圆形和类似的图形。
我想你正在寻找destination-out
:
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function() {
var ctx = document.getElementById('canvas').getContext('2d');
ctx.fillStyle = "#09f";
ctx.fillRect(15,15,70,70);
ctx.globalCompositeOperation = 'destination-out';
ctx.fillStyle = "#f30";
ctx.beginPath();
ctx.arc(75,75,35,0,Math.PI*2,true);
ctx.fill();
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="300"/>
</body>
</html>
在jsFiddle上查看它的实际效果。
您也可以使用“剪辑”而不是-“清除”。像这样的东西:
drawRectangle(ctx);
walkCirclePath(ctx);
ctx.clip();
ctx.clear();
但是抗锯齿不能以这种方式工作;
出色地。那个挺难。
我发现画除圆圈以外的所有地方的最佳解决方案是
c.save();
c.beginPath();
c.moveTo(0, 0);
c.lineTo(x, 0);
c.arc(x, y, 75, - Math.PI / 2, Math.PI * 2 - Math.PI / 2, 1);
c.lineTo(x, 0);
c.lineTo(1000, 0);
c.lineTo(1000, 500);
c.lineTo(0, 500);
c.clip();
c.drawImage(window.tBitmap[0], x - 100, y - 100);
c.restore();
我不敢相信没有更好的解决方案。但它适用于我的需要。