【发布时间】:2019-04-13 10:59:57
【问题描述】:
是否可以在 HTML5 画布中设置位图的大小,使其与设备像素的显示大小完全匹配,即用于显示画布的物理像素数,即使 window.devicePixelRatio 是不是整数?
关于如何在webglfundamentals 上调整画布大小有很好的描述,但它不能正确处理非整数devicePixelRatios。到目前为止我的理解:
- 画布的显示大小在 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 屏幕的 devicePixelRatio 为 1.5,页面缩放会影响这一点,因此 devicePixelRatio 通常不是整数的原因有很多。我们能做什么?
【问题讨论】:
-
window.devicePixelRatio永远不会是整数,根据MDN:双精度浮点值 -
@JackBashford 我认为他的意思是自然数而不是分数
-
所以他的意思是他想绕过它@NielsNet?
-
你不能只使用 CSS 将画布的宽度和高度设置为 100% 吗?
-
乔纳森,不,这只会影响显示大小,与位图大小无关。
标签: javascript css html html5-canvas pixel