当我们在canvas中绘制一条直线,会默认线的宽度为1px,颜色为黑色。但是我们会发现线条的宽度要比1px宽,颜色也没有那么黑,更像是灰色。我们看下效果。
代码:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
canvas {
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas id="mycanvas" width="200" height="200"></canvas>
</body>
</html>
<script>
var mycanvas = document.getElementById('mycanvas');
var ctx = mycanvas.getContext('2d');
ctx.moveTo(50,50);
ctx.lineTo(150,50);
ctx.stroke()
</script>
效果:
我们边框设置的是1px,直线默认也是1px,但是我们发现直线就是比边框要粗颜色要淡。
为什么会出现这种效果呢?
原因:
如图,我们的电脑屏幕是由一个个像素点构成,当我们在(0,0)坐标开始横向绘制一条直线时,canvas会找的y轴0px刻度的中心0.5px开始绘制。直线的宽度为0.5px到1.5px,但是又由于浏览器解析像素的最小单位为1px,所以浏览器会把0.5px解析为1px。使得直线变成了2px。颜色也会变淡。就像一瓶墨水中,只装了半瓶墨水,又装了半瓶水稀释,所以颜色会变淡了。解决办法为,movaToy轴上下移动0.5px。
对比代码:
<style>
canvas {
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas id="mycanvas" width="200" height="200"></canvas>
</body>
</html>
<script>
var mycanvas = document.getElementById('mycanvas');
var ctx = mycanvas.getContext('2d');
ctx.moveTo(50,50);
ctx.lineTo(150,50);
//y轴+0.5
ctx.moveTo(50,50.5);
ctx.lineTo(200,50.5);
ctx.stroke()
</script>
对比图:
不过我们在作图中可以忽略这个缺陷。