我正在将游戏地图绘制到画布中。地面由瓷砖组成 - 简单的 64x64 png 图像。
当我在 Chrome 中绘制它时,它看起来不错(左),但是当我在 Firefox/Opera/IE 中绘制它(右)时,我得到了可见的边缘:
当我使用四舍五入的数字时,问题就消失了:
ctx.drawImage(img, parseInt(x), parseInt(y), w, h);
但这在我使用缩放时无济于事:
ctx.scale(scale); // anything from 0.1 to 2.0
我也尝试了这些,但没有改变:
ctx.drawImage(img, 5, 5, 50, 50, x, y, w, h); // so not an issue of clamping
ctx.imageSmoothingEnabled = false;
image-rendering: -moz-crisp-edges; (css)
有没有办法让它在 ff/op/ie 中工作?
编辑:找到部分解决方案
在宽度/高度上添加 1 个像素并按比例(宽度+1/比例)进行补偿似乎有帮助:
ctx.drawImage(props.img, 0, 0, width + 1/scale, height + 1/scale);
它制造了一些人工制品,但我认为这是可以接受的。在此图像上,您可以看到没有边缘的绿色瓷砖,以及未补偿的蓝色窗口,仍然有可见的边缘: