DPI与PPI本质不同:DPI是印刷墨点密度,PPI是屏幕像素密度,二者不可直接换算;Windows中“96 DPI”仅为逻辑基准值,不反映真实PPI;安卓中densityDpi实为系统采样的屏幕PPI,用于dp换算,与打印DPI无关。

一、DPI 与 PPI 的本质区别
DPI(Dots Per Inch)原为印刷领域单位,指每英寸长度上可呈现的物理墨点数量;PPI(Pixels Per Inch)则是显示领域单位,指每英寸长度上排列的像素点数量。二者属于不同技术语境下的物理密度度量,不能直接等价换算,也不存在固定数值的“1 DPI = X PPI”通用公式。
二、为何存在“1 DPI = 1 PPI”的常见说法
该说法仅适用于数字显示设备中软件层面的简化映射:当操作系统将显示器逻辑分辨率设为与物理像素一一对应(即无缩放),且图像渲染引擎按 1:1 映射像素到显示单元时,系统会将当前屏幕的 PPI 值同时标称为 DPI 值用于接口兼容。例如 Windows 默认使用 96 DPI 作为用户界面缩放基准,实际对应的是约 96 PPI 的显示密度假设。
1、打开 Windows 设置 → 系统 → 显示 → 缩放与布局。
2、观察“更改文本、应用等项目的大小”下方标注的“推荐缩放:100%(96 DPI)”。
3、该 96 DPI 并非测量所得,而是系统约定的逻辑密度值,不反映真实屏幕物理 PPI。
三、真实设备中 DPI 与 PPI 的数值关系
对于同一块硬件,其物理 PPI 是唯一确定的,可通过公式 √(横向像素² + 纵向像素²) ÷ 对角线英寸数精确计算;而 DPI 在打印输出时由打印机驱动和图像处理软件共同决定,与显示设备无关。若将一张 PPI 为 326 的 iPhone 屏幕截图以 300 DPI 输出至打印机,该 300 DPI 仅控制打印时墨点排布密度,与手机屏幕的 326 PPI 无数学换算关系。
1、获取设备屏幕分辨率(如 1170×2532)和对角线尺寸(如 6.1 英寸)。
2、代入公式:√(1170² + 2532²) ÷ 6.1 ≈ 460 PPI。
3、该数值是屏幕固有属性,不会因打印设置中的 DPI 值改变而变化。
四、安卓开发中 dp 与 PPI/DPI 的关联规则
安卓系统采用 dp(density-independent pixel)作为布局单位,其换算依赖基准密度 160 PPI(亦称 160 dpi)。此时 1 dp = 1 px;当设备实际 PPI 为 240 时,1 dp = (240/160) px = 1.5 px。该公式中使用的“dpi”实为系统对屏幕物理 PPI 的采样值,并非打印领域的 DPI 概念。
1、在 AndroidManifest.xml 或资源目录中声明适配限定符(如 values-sw600dp)。
2、运行时通过 Resources.getDisplayMetrics().densityDpi 获取系统报告的密度值。
3、该 densityDpi 值即为系统认定的当前屏幕 PPI,取整后用于 dp→px 换算,与打印机 DPI 完全隔离。











