这并不完全正确,您正在计算 dpi 的近似值,而不是实际 dpi。
pixelRatio 介于真实像素和独立像素之间:
real pixel distance (px) = pixelRatio * independente pixel distance (dp)
以华为 Y9s (2019) 为例来自https://yesviz.com/devices.php的指标
width in independant pixel = 360 dp
width in real pixel = 1080 px
density in independant pixel = 130 dip
density in real pixel = 391 dpi
ratio = 3
the upper formula gives us: 360dp * 3 ≈ 1080px => all good
but ratio = 3
is different from : dpi / 160 = 391 /160 = 2.44
Android 混淆了实际的独立密度和存储桶密度值。 (https://www.youtube.com/watch?v=zhszwkcay2A)
但是渲染是不同的,如果你在两台苹果设备上显示一个 320dp 的 div :
Ipad Pro 12.9'' (2020) with 132 density in independant pixels => div is printed 61mm or 2.36inch on the screen
Iphone 11 (2019) with 163 density in independant pixels => div is printed 50mm or 2inch on the screen
所以从技术上讲,每台设备上与密度无关的像素可以近似为 160dip
以及对应的密度近似实像素:桶密度值。我们称之为~dpi。可以用pixelRatio检索
~dpi = pixelRatio * 160