对圆形和线条使用相同的不透明度和颜色,但在画布上显示奇怪的结果[重复]

Posted

技术标签:

【中文标题】对圆形和线条使用相同的不透明度和颜色,但在画布上显示奇怪的结果[重复]【英文标题】:use the same opacity and color for circle and line but shows a weird result on canvas [duplicate] 【发布时间】:2022-01-18 05:29:42 【问题描述】:

我对画布上的线条和圆圈使用相同的颜色,但是,它给了我一种奇怪的效果。我希望它不显示圆圈中的线条。

为什么添加 alpha 值会产生如此大的差异?

这是我的代码:

        function draw() 
            
            let color = "rgba(192,192,192,0.5)";
            
            //draw circle
            for (let i = 0; i < circleArray.length; i++) 
                
                let circle = circleArray[i]
                
                
                context.beginPath();
                context.arc(circle.x, circle.y, circle.radius, 0, Math.PI * 2);
                context.fillStyle = color;
                context.fill();
            ;
            
            //draw line
            context.beginPath();
            for (let i = 0; i < circleArray.length; i++) 
                let circleI = circleArray[i];
                context.moveTo(circleI.x, circleI.y);

                for (let j = 0; j < circleArray.length; j++) 
                    let circleII = circleArray[j];
                    if (distance(circleI, circleII) < 350) 
                        context.lineTo(circleII.x, circleII.y);
                    
                
            
            
            context.lineWidth = 2;
            context.strokeStyle = color;
            context.stroke();
        

这就是我现在所拥有的。

预期。这就是我想要的,但它的不透明度为 1。我希望它的不透明度为 0.5。

【问题讨论】:

【参考方案1】:

我知道您可以使用 Path2D 创建一条路径,让所有内容都获得相同的 alpha 值... 可以做复杂的形状,代码如下:

const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
context.fillStyle = "rgba(192,192,192,0.5)";

let cArray = [x:25, y:10, x:25, y:35, x:45, y:35, x:45, y:55, x:65, y:55]

let path = new Path2D()
for (let i = 0; i < cArray.length; i++) 
  path.arc(cArray[i].x, cArray[i].y, 15, 0, Math.PI * 2);
  path.closePath()
;

context.fill(path);
&lt;canvas id="canvas"&gt;&lt;/canvas&gt;

但如果我们混合填充和描边,它看起来不像你想要的那样...... 也许将这种方法与 Path2D 一起使用并绘制矩形而不是线条?

【讨论】:

以上是关于对圆形和线条使用相同的不透明度和颜色,但在画布上显示奇怪的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当使用洪水填充算法填充颜色后绘制线条时,填充颜色消失

HTML5 画布 - 当 alpha < 1 时,相同的 RGBA 样式会产生不同的颜色

为啥我的 HTML5 画布边缘的线条变得不那么不透明?

HTML Canvas 线条透明度不适用于移动 Safari

更改线条的不透明度

在透明表单内设置表单的不透明度