在HTML5画布中,是否可以设置位图的大小,使其与设备像素的显示大小完全匹配,即在window.devicePixelRatio
不是整数时,使用的物理像素数量来显示画布?
在webglfundamentals上有一个很好的描述如何调整画布大小的说明,但它不能正确处理非整数的devicePixelRatio
。 我的理解:
- 使用CSS设置画布的显示大小,例如:
canvas {width: 200px;}
。 - 使用HTML中的
<canvas width="100"/>
或JS中的canvas.width = 100
设置底层位图大小。 - 位图将被拉伸以适应CSS大小(受
object-fit
和object-position
影响)。 - 我们可以将位图大小设置为涉及
canvas.clientWidth
的某个表达式。 canvas.clientWidth
是一个整数,其单位是CSS像素,是内容的计算宽度(加上填充)。 我不知道浏览器实际上是否将内容绘制到整数个CSS像素或整数个设备像素中。
因此,webglfundamentals建议使用类似以下代码:
canvas.width = Math.floor(canvas.clientWidth * window.devicePixelRatio);
但是如果window.devicePixelRatio
是一个分数,有时候这种方法行不通(在整数坐标上绘制的2像素宽的线条会变得模糊)。我的1920x1080屏幕默认设备像素比例为1.5,页面缩放可能会影响到此值,所以导致设备像素比例往往不是一个整数。我们该怎么办呢?