在Windows 10中使用Delphi 10.4获取屏幕物理PPI的方法
获取屏幕物理PPI并绘制实际尺寸矩形的实现方案
核心逻辑
要绘制精准的2×2英寸矩形,核心是先获取屏幕物理PPI(每英寸像素数),再通过公式计算矩形的像素尺寸:矩形像素边长 = 2 * 物理PPI。
各平台获取物理PPI的可行方法
Windows
- 方法1:调用系统API获取基础PPI
使用GetDeviceCaps函数,传入LOGPIXELSX或LOGPIXELSY参数,可获取系统当前DPI设置,但该值可能受系统缩放影响,并非严格物理PPI。 - 方法2:读取EDID计算精准PPI
读取显示器EDID数据(包含屏幕物理宽高,单位毫米),结合屏幕分辨率计算:
垂直PPI同理计算,多数屏幕的水平/垂直PPI一致,取其一即可。物理宽度英寸 = EDID物理宽度mm / 25.4 水平PPI = 屏幕水平分辨率 / 物理宽度英寸
macOS
- 通过Core Graphics与
NSScreenAPI获取:- 用
CGDisplayCopyDisplayMode获取屏幕物理分辨率(像素宽高) - 用
CGDisplayScreenSize获取屏幕物理尺寸(单位毫米) - 转换为英寸后计算PPI:
PPI = 分辨率边长 / (物理尺寸mm / 25.4)
- 用
iOS
- 结合
UIScreen属性计算:- 获取物理像素分辨率:
UIScreen.main.nativeBounds.size - 结合设备官方标称的物理尺寸(如iPhone 14屏幕宽度为2.82英寸),计算PPI:
PPI = 物理像素边长 / 物理宽度英寸 - 获取物理像素分辨率:
Android
- 优先通过屏幕规格计算:
- 获取屏幕物理分辨率:
displayMetrics.widthPixels/heightPixels - 结合设备官方标称的屏幕对角线尺寸(如6.7英寸),计算PPI:
注意PPI = sqrt(宽度像素² + 高度像素²) / 屏幕对角线英寸数DisplayMetrics.xdpi/ydpi可能存在厂商校准误差,仅作参考。 - 获取屏幕物理分辨率:
绘制2×2英寸矩形的步骤
- 获取精准的物理PPI值
- 计算矩形的物理像素边长:
sideLength = 2 * PPI - 绘制时确保使用物理像素坐标(比如Windows下开启DPI感知,iOS/Android用原生绘图API处理像素映射),避免系统逻辑像素缩放干扰
- 用实际尺子测量屏幕矩形,微调PPI值以达到精准的2×2英寸效果
内容的提问来源于stack exchange,提问作者user3140961
相关产品推荐
相关产品推荐

