【问题标题】:How to disable shape antialiasing in a HTML5 Canvas? (imageSmoothingEnabled & pixelated not working) [duplicate]如何在 HTML5 Canvas 中禁用形状抗锯齿? (imageSmoothingEnabled 和像素化不起作用)[重复]
【发布时间】:2019-07-04 03:18:22
【问题描述】:

我正在尝试将一些 2D 形状渲染到按比例放大的低分辨率画布上。为此,我正在使用画布的 2d 上下文函数“beginPath”、“moveTo”、“lineTo”和“fill”。但是我体验到,我正在渲染的每个形状都将在形状边缘使用抗锯齿进行渲染,在这种情况下我不需要并且想要。

我尝试通过设置“context.imageSmoothingEnabled = false”来禁用图像平滑,并将“图像渲染:像素化”添加到画布的样式中,但这些似乎都没有帮助。有没有办法在没有抗锯齿的情况下渲染形状,或者不能禁用此功能。如果不是这样就很糟糕了。

function drawOne(){
    var canvas = document.getElementById("canvas");
    canvas.style.imageRendering = "pixelated";
    		
    var ctx = canvas.getContext("2d");
    ctx.imageSmoothingEnabled = false;
	
    ctx.beginPath();
    ctx.moveTo(2, 2);
    ctx.lineTo(30, 10);
    ctx.lineTo(12, 30);
    ctx.closePath();
    ctx.fillStyle = "#FF0000";
    ctx.fill();
}

drawOne();
<canvas id="canvas" width="32" height="32" style="width:512px;height:512px;background-color:#000000;"></canvas>

一些附加信息:我正在尝试实现一个 3D 仿射纹理映射器(就像好的 ol PSone),因此需要画布上下文的本机渲染性能。

【问题讨论】:

  • 与您的具体问题无关,但您是否考虑过将 SVG 用于您正在做的事情?不确定它是否适合您的用例,但似乎给出了您的示例代码。
  • 我目前不确定这种方法的性能,因为我正在尝试实现一个 3D 仿射纹理映射系统(就像在 PSone 上一样),它将实时渲染到全屏的 428x240 像素画布上模式。
  • 您可能对this q/a也感兴趣

标签: javascript html css canvas html5-canvas


【解决方案1】:

没有标准功能,但我在您的代码中添加了几行来模拟它:https://jsfiddle.net/pgnksbmu/

            for (var y = 0; y < 32; y++) {
                for (var x = 0; x < 32; x++) {
                if (ctx.isPointInPath(x + 0.5, y + 0.5)) {
                    ctx.fillRect(x, y, 1, 1);
                }
              }
            }

【讨论】:

  • 好吧,因为我目前正在尝试在画布中实现一个小的 3D 仿射纹理映射系统,这会使渲染性能下降。不过感谢您的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2011-05-31
  • 2012-08-23
  • 2023-04-06
  • 2012-12-13
  • 2011-02-16
相关资源
最近更新 更多