javascript - 在 Canvas 上画线,但最后的线已经褪色

标签 javascript html canvas

我正在尝试在黑色背景上绘制白线网格。

底部的 3 条水平线在我重新绘制之前似乎已经褪色,我不明白为什么会这样。有没有人以前看过这个和/或知道我做错了什么?

最佳答案

这是因为线条是在它们上方的所有像素上绘制的(在 Canvas 上定位是 float 的)。当你想在 Canvas 上用 javascript 绘制精确的垂直或水平线时,你最好将它们设置为半整数。

参见插图:绘制的第一条水平线的 y 位置为 1。这条线模糊且宽。第二条水平线的 y 位置为 4.5。它薄而精确。

enter image description here

例如,在您的代码中,我通过将水平线循环更改为此获得了很好的结果:

                // 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/

相关文章:

javascript - 为什么我的函数将一个值推得太大?

javascript - js里面有css解析器吗?

android - 在位图上写评论

javascript - HTML5 Canvas 上的多个事件监听器

java - 如何在 Canvas 上绘制多个圆圈?

javascript - ",this.uiDialogTitlebar).html(f||"是什么样的血腥黑客

javascript - Angularjs Controller - 不平凡的初始状态

javascript - 使用fetch在请求结束前获取HTTP结果

javascript - 拖动事件仅触发一次

php - 有什么缺点,上传文件一定要注意