我正在canvas中绘制游戏地图。地面由瓷砖组成,是简单的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); // 所以不是夹紧的问题
ctx.imageSmoothingEnabled = false;
image-rendering: -moz-crisp-edges; (css)
有没有办法使它在Firefox/Opera/IE中工作?
编辑:已找到部分解决方案
将宽度/高度增加1像素,然后通过缩放进行补偿(width+1/scale)似乎有所帮助:
ctx.drawImage(props.img, 0, 0, width + 1/scale, height + 1/scale);
它会产生一些瑕疵,但我认为这是可以接受的。在这张图片上,你可以看到没有边缘的绿色瓷砖和未补偿的蓝色窗户,仍然有可见的边缘: