Point与Pixel的区别是什么?为何Pixel字体不受DPI影响?
Point与Pixel的区别及为何Pixel字体不受DPI影响?
我编写了一个PyQt5脚本,用于验证字体设置与图像DPI的关系:当使用setPixelSize(25)时,绘制的文本字号不会受self.image.setDotsPerMeterX(75)、self.image.setDotsPerMeterY(75)和self.image.setDevicePixelRatio(1)的影响;但使用setPointSizeF(25)时,文本大小会随DPI设置变化。
我的问题是:Point与Pixel的区别是什么?为何Pixel字体不受DPI影响?
from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont, QImage, QPainter from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget import sys # 补充原代码缺失的sys导入 DEFAULT_WIDTH = DEFAULT_HEIGHT = 250 class QPainterWidget(QWidget): def __init__(self): super().__init__() self.image = QImage(DEFAULT_WIDTH, DEFAULT_HEIGHT, QImage.Format_RGB32) self.image.fill(Qt.green) self.image.setDevicePixelRatio(1) self.image.setDotsPerMeterX(75) self.image.setDotsPerMeterY(75) painter = QPainter(self.image) point_size_font = QFont('arial') point_size_font.setPointSizeF(25) painter.setFont(point_size_font) painter.drawText(0, 0, DEFAULT_WIDTH//2, DEFAULT_HEIGHT//2, Qt.AlignCenter, "point font text") pixel_size_font = QFont('arial') pixel_size_font.setPixelSize(25) painter.setFont(pixel_size_font) painter.drawText(0, 0, (DEFAULT_WIDTH//2) + 100, (DEFAULT_HEIGHT//2) + 100, Qt.AlignCenter, "pixel font text") painter.end() def paintEvent(self, event): painter = QPainter(self) painter.drawImage(0, 0, self.image) painter.end() class MainWindow(QMainWindow): def __init__(self): super().__init__() self.resize(DEFAULT_WIDTH, DEFAULT_HEIGHT) self.setCentralWidget(QPainterWidget()) app = QApplication(sys.argv) window = MainWindow() window.show() app.exec()
问题解答
1. Point与Pixel的核心区别
- Point(磅):印刷出版行业的物理尺寸单位,1磅≈1/72英寸,和物理介质绑定。比如25磅的字体,打印到纸上的物理高度固定为≈0.347英寸,与显示设备无关。
- Pixel(像素):数字图像/屏幕的最小显示单元,属于数字画布单位。仅对应图像或屏幕上的像素点数量,和物理尺寸无直接绑定——同样25像素的字体,在高分辨率屏幕上物理尺寸小,低分辨率屏幕上物理尺寸大。
2. 为何Pixel字体不受DPI影响
DPI(每英寸点数)的作用是定义数字像素和物理尺寸的换算关系,比如你设置的75 dots per meter(约1.905 DPI),是告诉系统“这个图像每米对应75个像素”。
当调用setPixelSize(25)时,你直接指定了字体在数字图像中要占用的像素点数量,Qt会直接按这个像素数渲染字体,完全跳过DPI换算逻辑——不管图像DPI设置如何变化,字体占用的像素数固定,所以在图像上的显示大小不会改变。
而setPointSizeF(25)是基于物理尺寸的设置,Qt会根据图像DPI计算所需像素数,公式为:像素高度 = 磅数 × DPI / 72。DPI越高,计算出的像素数越多,字体在图像上看起来越大;反之则越小,因此会受DPI设置影响。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

