微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – HTML5,canvas和strokeRect:lines narrower?

一个愚蠢的简单画布用法
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

ctx.strokeStyle = "#CCCC00";
ctx.linewidth = 3;
ctx.strokeRect(0,width,height);

产生一个矩形,上面和左边的线条较窄:

为什么会这样呢?我需要用padding来补偿吗?它很烦人.

解决方法

2件事情

首先,奇数行宽(1,3,5,…)绝对不会用整数像素值绘制.这是因为X和Y是指像素之间的空间,而不是它们的中心.因此,从[1,1]到[1,10]运行的1的笔画将半像素的左列像素溢出一半,并向右移动一半.如果你从[1.5,1]到[1.5,10]画线,那么它将填满左边的一半,一半到右边填满整个像素列.

任何奇数的宽度都会显示这种行为,但即使是数字也不会因为它们填满了每一面的整个像素.

第二,盒子被画布顶部遮蔽.当您将[3,0]上的3px笔画居中时,它将会溢出,远远超出画布的可见范围[-1.5,-1.5].所以它看起来应该是一半的厚度.

看到差异的证明在这里
http://jsfiddle.net/F4cqk/2/

一个就像你的代码.第二个从左上角移开,显示其宽度均匀.第三个显示如何渲染3px笔画,而不会出现子像素模糊.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐