javascript - Canvas 线宽太粗

标签 javascript html canvas

我正在尝试canvas而且我无法让线条变得更细。

我正在使用lineWidth as .5但还是太大胆了。

const c = canvas.getContext('2d');

canvas.width = this.track.width();
canvas.height = 18;

c.beginPath()
c.moveTo(where, 20)
c.lineTo(where, 20)
c.lineTo(where, 0)

// If i go .4 the line starts having opacity
c.lineWidth = .5;
c.stroke()

没有解决办法吗?

这就是我的网格的样子

my grid

最佳答案

不透明度是 Canvas 创建比像素更窄的线条外观的方式,因为像素(根据定义)是 Canvas 使用的最小单位。

但这并不意味着所有希望都破灭了,因为这只是一个问题,具体取决于您所说的“像素”的含义。

CSS 单位 px,它对应于曾经视频显示设备上可用的最小实际像素,通常在每英寸 72-96 的范围内(每厘米 28-38)。

还有实际的设备像素,现在通常只有一半或更小。

当您拥有高分辨率设备像素时,使用 Canvas 获得更清晰线条的技巧是缩放。用它来计算您可以有效扩展多少:

常量缩放 = window.devicePixelRatio || 1;

假设此处的值为 2(因为它在我当前的笔记本电脑上)。如果您想要创建一个占据 400 像素 x 300 像素的 Canvas ,请创建一个 800x600 的 Canvas 。然后使用 CSS 样式 width: 400px; Canvas 上的高度:300px

现在,只要您绘制的设备支持更高分辨率,您就可以创建锐利的半宽线条。

我在 Angular 应用程序的很多地方都使用了这个技巧:https://skyviewcafe.com/ 。如果您想深入研究源代码以查找高分辨率 Canvas 绘图的示例,这里有一个指向源代码的链接。

请注意!

当您指的是半 Angular 时,您必须将 lineWidth 指定为 1,或者使用 Canvas 缩放,如下所示:

const context = this.canvas.getContext('2d');
context.scale(scaling, scaling);

小心使用context.scale()——它的影响是累积的。如果您在同一上下文中连续执行 context.scale(2, 2) 两次,您的缩放因子将为 4,而不是 2。

context.setTransform(1, 0, 0, 1, 0, 0);

...如果您想多次调用 context.scale(),则重置缩放因子,且效果不会累积。

关于javascript - Canvas 线宽太粗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57556626/

相关文章:

javascript - 如何检测点击后鼠标按钮是否被按住一定时间

javascript - 缩放和旋转后,HTML5 Canvas 会回移

javascript - 在 Browserify 中制作 jQuery、Backbone 等全局变量

mysql查询中的php循环

html - 旋转和缩放脚本

html - HTML 文本周围的小圆圈图像/图标

html - 修改伪元素:after content with Jquery的css样式

javascript - 避免Ajax回调 hell "Nesting"

javascript - animate.css 动画之间的延迟

javascript - 使用助手渲染 Ember View