javascript - HTML5 canvas渲染矩形的奇怪bug(?)

标签 javascript html canvas

我正在使用 HTML5 canvas 来预渲染 Sprite ,并且遇到了一些看起来像渲染错误的奇怪行为。以下最小示例生成它:

var CT = document.getElementById("myCanvas").getContext("2d");
CT.scale(24, 24);
CT.translate(1.0717, 0.1);
CT.rect(0.2, 0.35, 0.4, 0.1);
CT.rect(-0.05, -0.05, 0.1, 1);
CT.translate(0.4, 0);
CT.rect(-0.05, -0.05, 0.5, 1);
CT.fill();
<canvas id="myCanvas" width="50" height="30" style="border:1px solid #d3d3d3;"></canvas>

查看生成的图像,我注意到水平条干扰左侧的垂直条,尽管它没有碰到它。更改几何形状(例如删除右侧的垂直条)会以(据我所知)不可预测的方式更改工件。

enter image description here

你们中有人遇到过这个问题吗?什么可能导致它以及如何避免它?这让我很恼火。该行为发生在不同的浏览器中(我在 IE11 和 Firefox Quantum 上测试过)。

如果不清楚,请查看最左侧矩形上最左侧的像素列。指向红色箭头的像素比蓝色箭头指向的像素更暗,尽管右侧的其他 2 个矩形看起来应该对左侧的矩形完全没有影响。

enter image description here

最佳答案

我设法在 Edge 中解决了这个问题,但在 Firefox 57.0.1 或 Chrome 62 中没有解决。这可能不是最快的解决方案,但它确实解决了 Edge 中的问题,即通过调用 自行栅格化每个矩形CT.fill 后跟 CT.beginPath 在每个矩形之后。

var CT = document.getElementById("myCanvas").getContext("2d");
CT.scale(24, 24);
CT.translate(1.0717, 0.1);
CT.rect(0.2, 0.35, 0.4, 0.1);
CT.fill();
CT.beginPath();
CT.rect(-0.05, -0.05, 0.1, 1);
CT.fill();
CT.beginPath();
CT.translate(0.4, 0);
CT.rect(-0.05, -0.05, 0.5, 1);
CT.fill();
<canvas id="myCanvas" width="50" height="30" style="border:1px solid #d3d3d3;"></canvas>

老实说,我会提交错误。虽然我知道 Canvas 规范有些宽松,但很难想象这个特定问题符合规范。 (虽然可能是)

关于javascript - HTML5 canvas渲染矩形的奇怪bug(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47594342/

相关文章:

javascript - 在 React JS 中使用 Axios 迭代数据

javascript - 如何检查电子邮件地址是否包含 @ 符号和 '.' 。在 html 和 javascript 中

javascript - contenteditable div : capture input event, 忽略粘贴事件

javascript - JQPlot 渲染垂直堆积条和水平图例的麻烦

javascript - 使用 Google Doc Apps 脚本缓存选定的文本元素

javascript - json循环后推送2个数组

javascript - 使用 jQuery/Javascript 将单击对象的类名分配给要切换的对象的 ID

javascript - 如何使用angular创建可重用的音频播放器组件

javascript - 在具有给定目标宽度/高度的 Canvas 上绘制 Canvas 会导致图像扭曲

javascript - JS OffscreenCanvas.toDataURL