Quick图形旋转缩放和平移

Posted QtHalcon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quick图形旋转缩放和平移相关的知识,希望对你有一定的参考价值。

1. scale和rotation

Item类型是所有其他可视化类型的基类型,所以在该类型中包含了很多基本的属性,对于所有继承自Item的类型都是可用的,比如这里我们要讲的scale和rotation。

其中scale属性保存了项目的比例因子,当其值小于1.0的时候,项目会被缩小;当其值大于1.0的时候,项目会被放大。当该属性值为负数时,会将项目镜像显示。其默认值为1.0。

而rotation属性保存了项目顺时针旋转的度数。默认值为0。

无论缩放还是旋转,默认都是以项目的中心为原点的,这个可以通过transformOrigin属性进行设置,可选的值如下图所示,默认值为Item.Center。

以下是一个实例:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480

    Image {
        id: img1
        source: "img.png"
        sourceSize.width: 300

    }

    Image {
        source: "img.png"
        sourceSize.width: 300

        anchors.top: img1.bottom; anchors.left: img1.left

        scale: -1
        mirror: true
        opacity: 0.6
    }

    Image {
          source: "img.png"
          sourceSize.width: 300

          anchors.left: img1.right

          transformOrigin: Item.BottomLeft
          rotation: 45
    }
}

2. Transform

上面讲到的Item类型中的这两个属性可以实现缩放和旋转操作,但是如果要进行更复杂的相关操作,还需要使用Item的transform属性。该属性需要指定一个Transform类型的列表。Transform是一个抽象类型,无法被直接实例化,常用的Transform类型有3个:Rotation、Scale和Translate,分别用来进行旋转、缩放和平移。这些类型可以通过专门的属性进行更高级的变换设置。

Rotation类型提供了坐标轴和原点属性。坐标轴axis属性组包含axis.x、axis.y和axis.z三个属性,分别代表X轴、Y轴和Z轴,可以实现3D旋转效果。原点origin属性组包含origin.x和origin.y属性。对于简单的2D旋转,是不需要指定坐标轴的,而对于典型的3D旋转,既需要指定原点,也需要指定坐标轴。坐标轴的示意图如下图所示。默认值为:axis { x: 0; y: 0; z: 1 }。

Scale类型提供了origin.x和origin.y属性设置原点,还可以使用xScale和yScale设置X轴和Y轴的比例因子,即在X轴方向和Y轴方向的缩放值。

Translate类型提供了x和y属性,分别用来设置在X轴和Y轴方向的偏移量。

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480

    Image {
        id: img1
        source: "cup.png"
        sourceSize.width: 100
    }

    Image {
        source: "cup.png"
        sourceSize.width: 100

        transform: [
            Translate {x: 200},
            Scale { origin.x: 50; origin.y: 50; yScale: 0.5}
        ]
    }

    Image {
        source: "cup.png"
        sourceSize.width: 100
        x: 400
        transform:
            Rotation { origin.x: 50; origin.y: 50; axis { x:1; y:0; z:1} angle:30 }
    }
}

 

 

以上是关于Quick图形旋转缩放和平移的主要内容,如果未能解决你的问题,请参考以下文章

计算机图形学-图形学中的基本变换(缩放平移旋转剪切镜像)

图片处理-opencv-3.图像缩放、旋转、翻转、平移

矩阵的平移旋转与缩放

Flutter动画 --- 平移/旋转/缩放/渐变

Web前端之变形:平移旋转与缩放

Unity 相机平移旋转缩放