首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Q像素映射的大小

更改Q像素映射的大小
EN

Stack Overflow用户
提问于 2022-05-03 08:48:28
回答 1查看 65关注 0票数 1

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

原创

结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 19:12:14

QTransform可以创建基本的形状转换,然后可以应用于QPixmap.transformed()

这个具体的例子使用了一个“透视图”转换,它使用投影和缩放信息,它是使用QTransform.quadToQuad()实现的。请注意,QTransform还提供了squareToQuad(),但有时不可靠。

重要的是创建两个QPolygonF实例,第一个实例基于图像的矩形,第二个实例的角位于它们的“投影”点。

请注意,从一个矩形创建一个QPolygonF会产生一个具有5个点的多边形,最后一个点是第一个点,以便使其“关闭”。相反,QTransform quadToQuad需要4分,所以必须删除最后一点。还请注意,角必须以相同的顺序排列,因此它们将是:左上角、右上角、右下角、左下角。

在下面的示例中,透视图将右上角移动到高度的20%,右下角移动到相同的对点(高度- 80% )。

代码语言:javascript
复制
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))

这是最后的结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72096909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档