背景:
我正在尝试创建一个可以使用真实世界尺寸的应用程序。 在我的特定情况下,如果不是100%精确也可以接受; 但是,越准确越好。
例如:如果我试图显示一个3厘米宽的正方形,并且实际上显示了一个2.8厘米宽的正方形,则可以接受。
问题:
虽然似乎有一些方法可以获取屏幕的宽度和高度(以像素为单位),但无法获取屏幕DPI或屏幕的宽度和高度(以厘米/英寸为单位)。
我的问题:如何获取或计算屏幕的DPI? 如果这不可能,是否有其他方法来尝试使用真实世界的测量值?
背景:
我正在尝试创建一个可以使用真实世界尺寸的应用程序。 在我的特定情况下,如果不是100%精确也可以接受; 但是,越准确越好。
例如:如果我试图显示一个3厘米宽的正方形,并且实际上显示了一个2.8厘米宽的正方形,则可以接受。
问题:
虽然似乎有一些方法可以获取屏幕的宽度和高度(以像素为单位),但无法获取屏幕DPI或屏幕的宽度和高度(以厘米/英寸为单位)。
我的问题:如何获取或计算屏幕的DPI? 如果这不可能,是否有其他方法来尝试使用真实世界的测量值?
1
等于mdpi屏幕(160 dpi
)。因此,如果PixelRatio.get()
返回1.5
,则为hdpi屏幕(160 * 1.5 = 240 dpi
)。1 inch = 160 pixels
1 inch = 2.54 cm
-----------------------
1 cm = 62.992126 pixels
因此,在这个屏幕上呈现3厘米宽的东西,需要189像素。
同样地,在xhdpi屏幕(例如PixelRatio.get() = 2
)上:
1 inch = 320 pixels
1 inch = 2.54 cm
-----------------------
1 cm = 125.98425 pixels
一个宽度为3厘米的物品需要有378个像素。
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)
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