像素相关知识的总结

像素相关知识的总结

像素、像素密度的概念

像素

像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
通俗地说,像素就是一个一个会发光的物理的点,这些点显示出不同的状态(亮度、颜色等),也就形成了不同的图像。

分辨率

我们平时所说的分辨率是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个物理像素点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值