Canvas globalCompositeOperation source-in 和 destination-in 不适用于多个源和目标

Canvas globalCompositeOperation source-in and destination-in not working with multiple source and destination

HTML5 Canvas globalCompositeOperation 值 source-in 和 destination-in 不适用于多个源图像和目标图像。运算结果为空白canvas。 globalCompositeOperation 的所有其他值都有效..

<!DOCTYPE html>
<html>
<body >
<canvas id="myCanvas" width="512" height="512"></canvas>
<script>
var c=document.getElementById('myCanvas');
var ctx=c.getContext('2d');
ctx.fillStyle='blue';
ctx.fillRect(10,10,50,50);
ctx.fillRect(100,100,50,50);
ctx.globalCompositeOperation='source-in';
ctx.beginPath();
ctx.fillStyle='red';
ctx.arc(50,50,30,0,2*Math.PI);
ctx.fill();
ctx.closePath();
ctx.beginPath();
ctx.fillStyle='red';
ctx.arc(110,110,30,0,2*Math.PI);
ctx.fill();
ctx.closePath();
</script>
</body>
</html>

让我知道我的操作方式是否有问题或者是错误?谢谢..

对 fill() 的每个后续调用都是一个新的复合操作。在您的情况下,最后一条弧线不与当前图形相交,将导致空白合成。

在调用 fill() 之前,您需要绘制所有要包含在复合操作中的元素。示例:

var c=document.getElementById('myCanvas');
var ctx=c.getContext('2d');
ctx.fillStyle='blue';
ctx.fillRect(10,10,50,50);
ctx.fillRect(100,100,50,50);

ctx.globalCompositeOperation='source-in';

ctx.fillStyle='red';
ctx.beginPath();
ctx.arc(50,50,30,0,2*Math.PI);
ctx.arc(110,110,30,0,2*Math.PI);
ctx.fill();