一个愚蠢的简单画布用法:
var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); ctx.strokeStyle = "#CCCC00"; ctx.lineWidth = 3; ctx.strokeRect(0,width,height);
产生一个矩形,上面和左边的线条较窄:@H_403_5@
为什么会这样呢?我需要用padding来补偿吗?它很烦人.@H_403_5@
解决方法
2件事情
首先,奇数行宽(1,3,5,…)绝对不会用整数像素值绘制.这是因为X和Y是指像素之间的空间,而不是它们的中心.因此,从[1,1]到[1,10]运行的1的笔画将半像素的左列像素溢出一半,并向右移动一半.如果你从[1.5,1]到[1.5,10]画线,那么它将填满左边的一半,一半到右边填满整个像素列.@H_403_5@
任何奇数的宽度都会显示这种行为,但即使是数字也不会因为它们填满了每一面的整个像素.@H_403_5@
第二,盒子被画布顶部遮蔽.当您将[3,0]上的3px笔画居中时,它将会溢出,远远超出画布的可见范围[-1.5,-1.5].所以它看起来应该是一半的厚度.@H_403_5@
看到差异的证明在这里:
http://jsfiddle.net/F4cqk/2/@H_403_5@
第一个就像你的代码.第二个从左上角移开,显示其宽度均匀.第三个显示如何渲染3px笔画,而不会出现子像素模糊.@H_403_5@