在画布中绘制线条,但最后的线条已褪色

IT技术 javascript html canvas
2021-03-04 08:46:05

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

底部 3 条水平线在我重新绘制它们之前似乎已经褪色,我无法弄清楚为什么会发生这种情况。有没有人以前见过这个和/或知道我做错了什么?

3个回答

这是因为线条是在所有像素上绘制的(在画布上的定位是浮动的)。当您想在画布上的 javascript 中绘制精确的垂直或水平线时,最好将它们分成半整数。

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

在此处输入图片说明

例如,在您的代码中,通过将水平线循环更改为:

                // 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();
                }

这是一个用非常细和干净的线条演示它的小提琴:

http://jsfiddle.net/dystroy/7NJ6w/

在所有像素上绘制一条线这一事实意味着绘制一条宽度恰好为一个像素的水平线的唯一方法是瞄准中间。我的基于画布的应用程序中通常有这种 util 函数:

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();
}

当然你最好对垂直线也这样做,以获得漂亮的页面。

惊人的!太棒了。非常感谢,很抱歉没有早点回复。
2021-05-10 08:46:05

对我来说它看起来并不褪色。也许这与您的操作系统或 PC 有关,无法正确渲染绘图。我在 Win 7 上使用 Chrome 20。测试一下。

我也在 Windows 7 上使用 Chrome 18.0.1025.162 m。我也用最新的firefox试过了,它仍然褪色。
2021-04-22 08:46:05

你必须这样定义objContext.lineWidth

objContext.lineWidth = 2;

我不确定为什么最后一行会褪色。http://jsfiddle.net/jSCCY/

那有点帮助,但是当我将它设置为一个 id 时,现在所有行都会褪色。我希望线条非常细。这就是我现在所拥有的:jsfiddle.net/jSCCY/7
2021-04-28 08:46:05