改变 Qpixmap 的大小
Changing the size of a Qpixmap
如何更改 Qpixmap 的 size/shape 以接收这样的结果?
原创
结果
QTransform can create basic shape transformations, which can then be applied to QPixmap.transformed()
.
这个具体案例使用“透视”变换,它使用投影和缩放信息,并且它是使用 QTransform.quadToQuad()
实现的。请注意,QTransform 也提供 squareToQuad()
,但它有时不可靠。
重要的是创建两个 QPolygonF 实例,第一个基于图像的矩形,第二个基于“投影”点的角。
请注意,从矩形创建 QPolygonF 会产生具有 5 个点的多边形,最后一个点是第一个点,以便使其“闭合”。 QTransform quadToQuad
相反,需要 4 个点,因此您必须删除最后一个点。另请注意,角 必须 顺序相同,因此它们将是:左上角、右上角、右下角、左下角。
在下面的示例中,透视将右上角移动到高度的 20%,将右下角移动到相同的相对点(高度 - 高度的 80%)。
class ProjectionTest(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
source = QtGui.QPixmap('square.jpg')
layout.addWidget(QtWidgets.QLabel(pixmap=source))
# the original rectangle of the image, as a QRectF (floating point)
rect = QtCore.QRectF(source.rect())
# the source polygon, ignoring the last point
square = QtGui.QPolygonF(rect)[:4]
# the "projected" square
cone = QtGui.QPolygonF([
rect.topLeft(),
QtCore.QPointF(rect.right(), rect.height() * .2),
QtCore.QPointF(rect.right(), rect.height() * .8),
rect.bottomLeft(),
])
transform = QtGui.QTransform()
if QtGui.QTransform.quadToQuad(square, cone, transform):
new = source.transformed(transform, QtCore.Qt.SmoothTransformation)
layout.addWidget(QtWidgets.QLabel(pixmap=new))
这是最终结果:
如何更改 Qpixmap 的 size/shape 以接收这样的结果?
原创
结果
QTransform can create basic shape transformations, which can then be applied to QPixmap.transformed()
.
这个具体案例使用“透视”变换,它使用投影和缩放信息,并且它是使用 QTransform.quadToQuad()
实现的。请注意,QTransform 也提供 squareToQuad()
,但它有时不可靠。
重要的是创建两个 QPolygonF 实例,第一个基于图像的矩形,第二个基于“投影”点的角。
请注意,从矩形创建 QPolygonF 会产生具有 5 个点的多边形,最后一个点是第一个点,以便使其“闭合”。 QTransform quadToQuad
相反,需要 4 个点,因此您必须删除最后一个点。另请注意,角 必须 顺序相同,因此它们将是:左上角、右上角、右下角、左下角。
在下面的示例中,透视将右上角移动到高度的 20%,将右下角移动到相同的相对点(高度 - 高度的 80%)。
class ProjectionTest(QtWidgets.QWidget):
def __init__(self):
super().__init__()
layout = QtWidgets.QVBoxLayout(self)
source = QtGui.QPixmap('square.jpg')
layout.addWidget(QtWidgets.QLabel(pixmap=source))
# the original rectangle of the image, as a QRectF (floating point)
rect = QtCore.QRectF(source.rect())
# the source polygon, ignoring the last point
square = QtGui.QPolygonF(rect)[:4]
# the "projected" square
cone = QtGui.QPolygonF([
rect.topLeft(),
QtCore.QPointF(rect.right(), rect.height() * .2),
QtCore.QPointF(rect.right(), rect.height() * .8),
rect.bottomLeft(),
])
transform = QtGui.QTransform()
if QtGui.QTransform.quadToQuad(square, cone, transform):
new = source.transformed(transform, QtCore.Qt.SmoothTransformation)
layout.addWidget(QtWidgets.QLabel(pixmap=new))
这是最终结果: