像素相关知识的总结
像素、像素密度的概念
像素
像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
通俗地说,像素就是一个一个会发光的物理的点,这些点显示出不同的状态(亮度、颜色等),也就形成了不同的图像。
分辨率
我们平时所说的分辨率是1920 * 1080,意思就是水平有1920个像素,垂直有1080个像素,也就意味着分辨率越高,屏幕包含的像素点也就越多,图像也就越清晰。
物理分辨率
物理分辨率即上述所说的分辨率,物理上有几个像素点,分辨率就是多少。
逻辑分辨率
个人理解,逻辑分辨率是为了解决软件和硬件之间的矛盾,例如,如果一个软件需要全屏,如果没有逻辑分辨率的概念,那么就需要将软件大小设置成屏幕的大小,也就是需要知道屏幕的分辨率。万一软件在另一个不同分辨率的屏幕上打开了,那么软件的全屏显示就会出现问题,原本可以全屏的软件在一个分辨率更大的屏幕上却不能全屏显示了!
举个栗子:某软件在开发时设置全屏时的大小是1280 * 720。之后在2560 * 1440的屏幕上显示,于是这个软件在全屏时只能占屏幕大小的1/4。使用物理分辨率的弊端就暴露出来了。当我们引入逻辑分辨率时,情况就不一样了。例如我告诉软件我的逻辑分辨率是1280 * 720,全屏时软件设置成1280 * 720,实际屏幕上已经占了2560 * 1440,也就是说一个逻辑像素点在工作时,背后有4个物理像素点在工作。
PPI(像素密度)
Pixels Per Inch也叫像素密度,所表示的是每英寸所拥有的像素数量。因此PPI数值越高,即代表显示屏能够以越高的密度显示图像。
这里的像素指的是物理像素。
计算方法:
下面放上python获取本机像素分辨率等信息的方法:
import winreg
import wmi
import math
PATH = "SYSTEM\\ControlSet001\\Enum\\"
m = wmi.WMI()
# 获取屏幕信息
monitors = m.Win32_DesktopMonitor()
for m in monitors:
print(m)
subPath = m.PNPDeviceID
if subPath is not None:
print(subPath)
infoPath = PATH + subPath + "\\Device Parameters"
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, infoPath)
# 屏幕信息按照一定的规则保存(EDID)
value = winreg.QueryValueEx(key, "EDID")[0]
winreg.CloseKey(key)
# 屏幕实际尺寸
width, height = value[21], value[22]
size = math.sqrt(pow(width, 2)+pow(height, 2)) / 2.54
# 推荐屏幕分辨率
widthResolution = value[56] + (value[58] >> 4) * 256
heightResolution = value[59] + (value[61] >> 4) * 256
sizeResolution = math.sqrt(pow(widthResolution, 2)+pow(heightResolution, 2))
# 屏幕像素密度(Pixels Per Inch)
widthDensity = widthResolution / (width / 2.54)
heightDensity = heightResolution / (height / 2.54)
sizeDensity = sizeResolution / size
print("屏幕宽度:", width, " (厘米)")
print("屏幕高度:", height, " (厘米)")
print("水平分辩率: ", widthResolution, " (像素)")
print("垂直分辩率: ", heightResolution, " (像素)")
# 保留小数点固定位数的两种方法
print("水平像素密度: ", round(widthDensity, 2), " (PPI)")
print("垂直像素密度: ", "%2.f" % heightDensity, " (PPI)")
print("PPI: ", "%2.f" % sizeDensity)
代码是通过查找注册表获取的信息。
注册表位置:
监视器信息:
注意到这里的PixelsPerXLogicalInch = 120;PixelsPerYLogicalInch = 120;
这就是逻辑PPI。全屏时一英寸的屏幕逻辑上占了120 * 120,实际上占了144 * 144。
屏幕相关信息:
这里的PPI=144,即一英寸屏幕上有144个物理像素点。