【Qt 学习之路】QML遮罩效果Demo

目录

1、效果

2、源码

3、OpacityMask遮罩

4、注意事项

5、官方示例


1、效果

先看一下做的Demo效果:

2、源码

import QtQuick 2.3
import QtQuick.Window 2.2
import QtGraphicalEffects 1.0

Window {
    visible: true
    Item {
        width: parent.width
        height: parent.height
        Image {
            id: person
            source: "qrc:/psb.jpg"
            anchors.fill: parent
            visible: false
        }
        Image {
            id: mask
            source: "qrc:/butterfly_transparent.png"
            anchors.fill: parent
            visible: false
        }
        OpacityMask {
            id:om
            anchors.fill: person
            source: person
            maskSource: mask
        }
    }
}



3、OpacityMask遮罩

属性介绍

  • cached : bool

使用缓存效果输出像素,可以提高渲染性能。每次更改源或效果属性时,都必须更新缓存中的像素。会增加内存消耗,因为存储效果输出需要额外的内存缓冲区。所以我们建议在源属性或效果属性设置动画时禁用缓存。默认为 false

  • invert : bool

控制 sourceMask 的 alpha 值的行为。如果此属性为 false,则生成的不透明度是源 alpha 与遮罩 alpha 的乘积,As * Am。如果此属性为 true,则生成的不透明度是源 alpha 乘以遮罩 alpha 的倒数,As * (1 - Am)。默认值为 false。Qt5.7 中引入了此属性

  • maskSource : variant

用作掩码的项。遮罩项渲染到中间像素缓冲区中,结果中的 alpha 值用于确定源项在显示中的像素可见性

  • source : variant

要屏蔽的源项。注意:不支持让效果包含自身

4、注意事项

  • OpacityMask 支持 OpenGL 渲染
  • 源和遮罩须确保大小相等,否则在使用时会先把遮罩缩放到源的大小,再进行像素渲染

5、官方示例

import QtQuick 2.12
import QtGraphicalEffects 1.12

Item {
    width: 300
    height: 300
    
    Image {
        id: bug
        source: "images/bug.jpg"
        sourceSize: Qt.size(parent.width, parent.height)
        smooth: true
        visible: false
    }
    
    Image {
        id: mask
        source: "images/butterfly.png"
        sourceSize: Qt.size(parent.width, parent.height)
        smooth: true
        visible: false
    }
    
    OpacityMask {
        anchors.fill: bug
        source: bug
        maskSource: mask
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙振宇

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值