为什么画布中有一个像素的偏移?

问题描述 投票:0回答:1

我在 64x64 画布上绘制 16x16 像素正方形,并使用 CSS 来缩放它们。然而,正方形的右角未对齐。谁能帮我弄清楚为什么会发生这种情况以及如何解决它?

我使用带有“图像渲染:像素化”和“图像渲染:锐边”的 CSS。在 Windows 上的 Google Chrome 浏览器中

const canvas = document.getElementById('myCanvas')
const ctx = canvas.getContext('2d')

ctx.fillStyle = "rgba(0, 0, 0, 0.7)"
ctx.fillRect(0, 0, canvas.width, canvas.height)

function drawSquare(positionY, positionX) {
    ctx.fillStyle = "green";
    ctx.fillRect(positionX * 16, positionY * 16, 16, 16);
}

drawSquare(1, 1)
drawSquare(2, 1)
        body {
          margin: 0;
          display: flex;
          align-items: center;
          justify-content: center;
          height: 100vh;
          background-color: #f0f0f0;
        }
        
        canvas {
          width: 100vmin;
          height: 100vmin;
          max-width: 100%;
          max-height: 100%;
          image-rendering: pixelated;
          image-rendering: crisp-edges;
        }
<body>
    <canvas id="myCanvas" width="64" height="64"></canvas>
</body>

canvas html5-canvas
1个回答
0
投票

尝试使用

transform: scale( <integer here> )
+
transform-origin: top left;
代替宽度和高度。

宽度和高度有时会导致分数缩放并导致像素未对齐。而变换将使用整数缩放来保留对齐和锐边 所以尝试这样的事情

canvas {
      transform: scale(10);
      transform-origin: top left; 
      image-rendering: pixelated; 
      image-rendering: crisp-edges;
    }
© www.soinside.com 2019 - 2024. All rights reserved.