我怎样才能改变Qpixmap的大小/形状来接收这样的结果呢?
原创

结果

发布于 2022-05-03 19:12:14
QTransform可以创建基本的形状转换,然后可以应用于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))这是最后的结果:

https://stackoverflow.com/questions/72096909
复制相似问题