【发布时间】:2012-05-09 13:30:52
【问题描述】:
我正在尝试在黑色背景上绘制白线网格。
在我重新绘制它们之前,底部的 3 条水平线似乎已经褪色,我无法弄清楚为什么会发生这种情况。有没有人见过这个和/或知道我做错了什么?
【问题讨论】:
标签: javascript html canvas
我正在尝试在黑色背景上绘制白线网格。
在我重新绘制它们之前,底部的 3 条水平线似乎已经褪色,我无法弄清楚为什么会发生这种情况。有没有人见过这个和/或知道我做错了什么?
【问题讨论】:
标签: javascript html canvas
对我来说,它看起来并没有褪色。也许这与您的操作系统或 PC 有关,无法正确渲染绘图。我在 Win 7 上使用 Chrome 20。测试一下。
【讨论】:
【讨论】:
这是因为线是在它们所覆盖的所有像素上绘制的(在画布上定位是浮动的)。当您想在画布上使用 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();
}
当然你最好也为垂直线做一个好看的页面。
【讨论】: