小智 9
默认笔划确实使用居中笔划,但遗憾的是没有参数来控制笔划的对齐方式,因此您必须计算矩形位置和大小的偏移值,或者组合两个矩形并使用填充规则evenodd:
var ctx = c.getContext("2d");
// default centered
ctx.lineWidth = 10;
ctx.strokeRect(10, 10, 100, 100);
ctx.lineWidth = 1;
ctx.strokeStyle = "red";
ctx.strokeRect(10, 10, 100, 100); // show main path
// inner
ctx.rect(150, 10, 100, 100);
ctx.rect(150+10, 10+10, 100-20, 100-20); // offset position and size
ctx.fill("evenodd"); // !important
ctx.strokeRect(150, 10, 100, 100);Run Code Online (Sandbox Code Playgroud)
<canvas id=c></canvas>Run Code Online (Sandbox Code Playgroud)
小智 8
希望这可以帮助!
而不是做:
ctx.fill();
ctx.stroke();
Run Code Online (Sandbox Code Playgroud)
做:
ctx.save();
ctx.clip();
ctx.lineWidth *= 2;
ctx.fill();
ctx.stroke();
ctx.restore();
Run Code Online (Sandbox Code Playgroud)
编辑
对我来说,我相信这是有效的,因为剪辑方法移除了已经存在的填充区域周围的任何填充和描边,这意味着笔划可以进入的唯一位置是在内部,因为否则它将被剪掉.
| 归档时间: |
|
| 查看次数: |
5951 次 |
| 最近记录: |