我正在尝试在黑色背景上绘制白线网格。
底部的 3 条水平线在我重新绘制之前似乎已经褪色,我不明白为什么会这样。有没有人以前看过这个和/或知道我做错了什么?
最佳答案
这是因为线条是在它们上方的所有像素上绘制的(在 Canvas 上定位是 float 的)。当你想在 Canvas 上用 javascript 绘制精确的垂直或水平线时,你最好将它们设置为半整数。
参见插图:绘制的第一条水平线的 y 位置为 1。这条线模糊且宽。第二条水平线的 y 位置为 4.5。它薄而精确。
例如,在您的代码中,我通过将水平线循环更改为此获得了很好的结果:
// Horizontal lines
for (var i = 1; i < objCanvas.height / intGridWidth; i++)
{
objContext.strokeStyle = "white";
var y = Math.floor(i*intGridWidth)+0.5
objContext.moveTo(0, y);
objContext.lineTo(objCanvas.width, y);
objContext.stroke();
}
这是一个用非常细和干净的线条演示它的 fiddle :
http://jsfiddle.net/dystroy/7NJ6w/
事实上,一条线是在它上面的所有像素上绘制的,这意味着绘制一条宽度正好是一个像素的水平线的唯一方法是瞄准中间。我通常在基于 Canvas 的应用程序中使用这种实用函数:
function drawThinHorizontalLine(c, x1, x2, y) {
c.lineWidth = 1;
var adaptedY = Math.floor(y)+0.5;
c.beginPath();
c.moveTo(x1, adaptedY);
c.lineTo(x2, adaptedY);
c.stroke();
}
当然你最好也为垂直线做,这样页面才会好看。
关于javascript - 在 Canvas 上画线,但最后的线已经褪色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373695/