我正在尝试在黑色背景上绘制白线网格。
底部 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();
}
当然你最好对垂直线也这样做,以获得漂亮的页面。
对我来说它看起来并不褪色。也许这与您的操作系统或 PC 有关,无法正确渲染绘图。我在 Win 7 上使用 Chrome 20。测试一下。