stroke(路径命令)
context.stroke()
使 Path 的周长根据当前 context.strokeStyle
进行描边,并且描边路径可视地绘制到画布上。
在执行 context.stroke
(或 context.fill
)之前,Path 存在于内存中,并且尚未在画布上以可视方式绘制。
绘制了不寻常的笔画方式
考虑这个示例 Path,它从 [0,5]
到 [5,5]
绘制 1 像素黑线:
// draw a 1 pixel black line from [0,5] to [5,5]
context.strokeStyle='black';
context.lineWidth=1;
context.beginPath();
context.moveTo(0,5);
context.lineTo(5,5);
context.stroke();
问题: 浏览器实际在画布上绘制了什么?
你可能希望在 y = 5 时获得 6 个黑色像素
但是(!)…… Canvas 总是在它定义的路径的两边画中风!
所以,由于这条线是在 y==5.0
定义的,Canvas 想在 y==4.5
和 y==5.5
之间画线
但是,再次(!)……计算机显示器无法绘制半像素!
那么对于不需要的半像素(以下蓝色显示)应该怎么做?
答案是 Canvas 实际上命令显示器绘制从 4.0
到 6.0
的 2 像素宽线。它还使线条比定义的 black
更轻。这种奇怪的绘图行为是抗锯齿,它有助于 Canvas 避免绘制看起来锯齿状的笔触。
一种调整技巧,仅适用于完全水平和垂直的笔划
你可以通过指定在半像素上绘制的线来获得 1 像素的纯黑线:
context.moveTo(0,5.5);
context.lineto(5,5.5);
使用 context.stroke()
在画布上绘制描边路径的示例代码:
<!doctype html>
<html>
<head>
<style>
body{ background-color:white; }
#canvas{border:1px solid red; }
</style>
<script>
window.onload=(function(){
// canvas related variables
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(50,30);
ctx.lineTo(75,55);
ctx.lineTo(25,55);
ctx.lineTo(50,30);
ctx.lineWidth=2;
ctx.stroke();
}); // end window.onload
</script>
</head>
<body>
<canvas id="canvas" width=100 height=100></canvas>
</body>
</html>