使用 <canvas> 元素绘制的网格看起来被拉伸了

Posted

技术标签:

【中文标题】使用 <canvas> 元素绘制的网格看起来被拉伸了【英文标题】:Grid drawn using a <canvas> element looking stretched 【发布时间】:2011-05-09 12:07:42 【问题描述】:

我正在尝试在 &lt;canvas&gt; 元素上绘制网格,最终目标是制作 Go board。

由于某种原因,网格看起来被拉伸了,线条粗于 1 个像素并且间距完全错误。它甚至没有从(10,10) 位置开始..

如果有人可以看看告诉我我做错了什么,那就太好了。

http://jsfiddle.net/h2yJn/

【问题讨论】:

在这里***.com/questions/2588181/…和***.com/questions/2892041/…找到答案 这个codereview.stackexchange.com/a/135207/210612 也可能有帮助 【参考方案1】:

我发现了问题。当您实际上必须设置宽度和高度属性时,我正在使用 CSS 设置 &lt;canvas&gt; 的尺寸。这导致它被拉伸/倾斜。

var canvas = $('<canvas/>').attr(width: cw, height: ch).appendTo('body');

http://jsfiddle.net/h2yJn/66/

【讨论】:

【参考方案2】:

请在 jsfiddle 之外尝试一下,也许 jsfiddle 正在应用一些线性变换。

另外,请确保在 x 和 y 坐标的任意位置添加 0.5。或者,您可以应用 translate(0.5, 0.5) 将所有坐标移动半个像素。

【讨论】:

我在 jsbin.com 上得到了相同的结果,我很确定我已经在任何可能添加它的地方添加了 0.5px。无论如何,这不会造成如此戏剧性的影响吗? 另一种方法是从 0.5 开始一个循环,如下所示:for (var i = 0.5; i &lt; fieldSize+1; i+=40) ...

以上是关于使用 <canvas> 元素绘制的网格看起来被拉伸了的主要内容,如果未能解决你的问题,请参考以下文章

Canvas---绘制折线图

canvas绘制形状

如何使用canvas绘制走势图

canvas知识点

使用canvas绘制时钟

HTML canvas 绘制时钟