Html5 canvas 如何消除HTML5画布中的默认不透明度?

Html5 canvas 如何消除HTML5画布中的默认不透明度?,html5-canvas,Html5 Canvas,我试图在HTML5画布上画两条黑线: JSFiddle: Javascript: var canvas = document.createElement('canvas'); canvas.height = 150; canvas.width = 150; var canvasContext = canvas.getContext('2d'); canvasContext.beginPath(); // Draw the red line. canvasContext.strokeStyle

我试图在HTML5画布上画两条黑线:

JSFiddle: Javascript:

var canvas = document.createElement('canvas');
canvas.height = 150;
canvas.width = 150;
var canvasContext = canvas.getContext('2d');
canvasContext.beginPath();

// Draw the red line.
canvasContext.strokeStyle = '#000';
canvasContext.moveTo(10, 0);
canvasContext.lineTo(10, 100);
canvasContext.stroke();

// Draw the green line.
canvasContext.moveTo(50, 0);
canvasContext.lineTo(50, 100);
canvasContext.stroke();

document.body.appendChild(canvas);​

然而,右边的线是灰色的,这意味着它是半透明的。如何确保默认不透明度为100(一点也不透明)?

您的第一条线更暗,因为您绘制了两次,每次调用
stroke()
一次。对
stroke()
的第二次调用绘制了两条线,因为您没有开始新路径。

您的第一条线更暗,因为您绘制了两次,每次调用
stroke()
一次。对
stroke()
的第二次调用绘制了两行,因为您没有启动新路径。

第二行由于抗锯齿而变轻。可以包括以下行,以确保每行渲染一次并避免抗锯齿效果

canvasContext.translate(0.5, 0.5);

由于抗锯齿,第二行较轻。可以包括以下行,以确保每行渲染一次并避免抗锯齿效果

canvasContext.translate(0.5, 0.5);

没错,但为什么在黑色上绘制黑色会产生较深的色调?这意味着有一个默认的透明度,对吗?事实上,正如格雷格·罗斯指出的那样,我忘了更仔细地观察图像。我最近换了一台高分辨率显示器,很难分辨一条线是1像素宽还是2像素宽……没错,但为什么在黑色上画黑色会产生更深的色调呢?这意味着有一个默认的透明度,对吗?事实上,正如格雷格·罗斯指出的那样,我忘了更仔细地观察图像。我最近换了一台高分辨率显示器,很难分辨一条线是1像素宽还是2像素宽……谢谢,它能工作,但这很奇怪。如何在两个方向上平移半个像素来关闭抗锯齿?它实际上并没有关闭抗锯齿。它只是确保一个像素宽的水平线和垂直线不会跨越像素边界。这里有一个很好的解释:谢谢你,这很有效,但这很奇怪。如何在两个方向上平移半个像素来关闭抗锯齿?它实际上并没有关闭抗锯齿。它只是确保一个像素宽的水平线和垂直线不会跨越像素边界。这里有一个很好的解释: