Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html5 canvas 填充&;HTML5画布中的斯托克宽度问题_Html5 Canvas - Fatal编程技术网

Html5 canvas 填充&;HTML5画布中的斯托克宽度问题

Html5 canvas 填充&;HTML5画布中的斯托克宽度问题,html5-canvas,Html5 Canvas,我想画一个封闭的形状(使用路径)&我的笔划宽度是10。 现在,我想填充这个形状,我可以使用上下文的fill()函数填充它。 但是,当我想改变我的形状的alpha值时,笔划和填充区域在形状的边界重叠 我只想填补我的中风后仍然是黑色的形状区域。 我附上了解释我的问题的图片 正如您在JSFIDLE中看到的, --重叠区域的颜色为复合色。那是我不想要的。 我希望它是完全一样的边界(或笔划颜色与阿尔法)。 --我无法指定闭合路径的填充区域。(没有contexx方法。) --我不能使用“glabalCom

我想画一个封闭的形状(使用路径)&我的笔划宽度是10。 现在,我想填充这个形状,我可以使用上下文的fill()函数填充它。 但是,当我想改变我的形状的alpha值时,笔划和填充区域在形状的边界重叠

我只想填补我的中风后仍然是黑色的形状区域。 我附上了解释我的问题的图片

正如您在JSFIDLE中看到的, --重叠区域的颜色为复合色。那是我不想要的。 我希望它是完全一样的边界(或笔划颜色与阿尔法)。 --我无法指定闭合路径的填充区域。(没有contexx方法。)
--我不能使用“glabalCompositeOperation”,因为在我的应用程序中,我在一个画布中绘制了多个形状。

您得到的效果似乎是画布如何在形状周围绘制线条的属性。线的一半厚度在形状内部绘制,一半厚度在形状外部绘制。一种方法是将填充的形状和边界绘制为单独的路径。下面显示了为您的示例执行此操作所做的更改。对于不规则形状,这将更加困难

            var canvas = document.getElementById("myCanvas");
            var context = canvas.getContext("2d");
            var topLeftCornerX = 188;
            var topLeftCornerY = 50;
            var width = 200;
            var height = 100;
            var linewidth = 10;

            context.globalAlpha = 0.5;
            context.beginPath();
            context.moveTo(topLeftCornerX, topLeftCornerY);
            context.lineTo(topLeftCornerX+width,topLeftCornerY);
            context.lineTo(topLeftCornerX+width,topLeftCornerY+height);
            context.lineTo(topLeftCornerX,topLeftCornerY+height);
            context.closePath();
            context.fillStyle = "#FF0000";
            context.fill();
            context.beginPath();
            context.moveTo(topLeftCornerX-linewidth/2, topLeftCornerY-linewidth/2);
            context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY-linewidth/2);
            context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY+height+linewidth/2);
            context.lineTo(topLeftCornerX-linewidth/2,topLeftCornerY+height+linewidth/2);
            context.closePath();
            context.lineWidth = linewidth;
            context.strokeStyle = "#00FF00";
            context.stroke();

谢谢你的回复。但就我而言,我总是需要画出复杂的路径。我找到的一个解决方案是,首先填充元素,然后使用“globalCompositeOperation=copy”在元素上划上一行。但我只会在画布上只需要一个形状时提供帮助。但在我的例子中,我已经在画布上绘制了许多形状,我需要在其他形状的顶部绘制另一个形状。我也可以画,但我需要使用临时画布并在其上绘制新形状,然后使用“drawImage”,在主画布上绘制形状。但我不想要临时画布。