项目后面的 QML Shader Effect 模糊
QML Shader Effect blur behind an item
是否可以对位于另一个项目后面的项目进行模糊处理?
示例:模糊图像的一部分(如在 qml 中 - parent.centerIn:图像)
我想要这样的东西:
Image { id: img
anchors.fill: parent
source: "bug.png"
Item { id: info
anchors.centerIn: parent
height: 200
width: 200
Text {
text: "HAMMER TIME"
color: "white"
}
/* BLUR CODE HERE TO BLUR BACKGROUND OF THIS ITEM */
/* which is a part of "bug.png" image with 200x200 size */
/* and offset equals to "info.x" and "info.y" */
}
}
这个问题会影响任何 shader effect
因为官方文档没有这个问题的答案而且我的所有尝试都没有成功 - 只能模糊 WHOLE ITEM但不是其中的一部分。
不是最漂亮的解决方案,但恐怕没有这样的 Qml 机制。
您可以在您的图片上应用具有相同来源的第二张图片,并根据您的需要对其进行剪辑,如下所示:
Image {
id: img
anchors.fill: parent
source: "bug.png"
Item { id: info
anchors.centerIn: parent
height: 200
width: 200
Text {
text: "HAMMER TIME"
color: "white"
}
/* BLUR CODE HERE TO BLUR BACKGROUND OF THIS ITEM */
/* which is a part of "bug.png" image with 200x200 size */
/* and offset equals to "info.x" and "info.y" */
clip:true
Image {
id: img2
x: -info.x
y: -info.y
width: img.width
height: img.height
source: img.source
}
FastBlur {
anchors.fill: img2
source: img2
radius: 32
}
}
这是我的解决方案。此版本仅适用于矩形。
Item ShaderEffectSource 有助于创建这样的源矩形。
import QtQuick 2.3
import QtQuick.Window 2.2
import QtGraphicalEffects 1.0
Window {
visible: true
width: 600
height:600
Image {
id: image_bug
anchors.fill: parent
source: "images/Original_bug.png"
}
ShaderEffectSource {
id: effectSource
sourceItem: image_bug
anchors.centerIn: image_bug
width: 400
height: 400
sourceRect: Qt.rect(x,y, width, height)
}
FastBlur{
id: blur
anchors.fill: effectSource
source: effectSource
radius: 100
}
}
如果你需要其他形状,我想你可能需要应用一个mask-shader,先剪掉相关部分,然后再应用模糊。
是否可以对位于另一个项目后面的项目进行模糊处理?
示例:模糊图像的一部分(如在 qml 中 - parent.centerIn:图像)
我想要这样的东西:
Image { id: img
anchors.fill: parent
source: "bug.png"
Item { id: info
anchors.centerIn: parent
height: 200
width: 200
Text {
text: "HAMMER TIME"
color: "white"
}
/* BLUR CODE HERE TO BLUR BACKGROUND OF THIS ITEM */
/* which is a part of "bug.png" image with 200x200 size */
/* and offset equals to "info.x" and "info.y" */
}
}
这个问题会影响任何 shader effect
因为官方文档没有这个问题的答案而且我的所有尝试都没有成功 - 只能模糊 WHOLE ITEM但不是其中的一部分。
不是最漂亮的解决方案,但恐怕没有这样的 Qml 机制。
您可以在您的图片上应用具有相同来源的第二张图片,并根据您的需要对其进行剪辑,如下所示:
Image {
id: img
anchors.fill: parent
source: "bug.png"
Item { id: info
anchors.centerIn: parent
height: 200
width: 200
Text {
text: "HAMMER TIME"
color: "white"
}
/* BLUR CODE HERE TO BLUR BACKGROUND OF THIS ITEM */
/* which is a part of "bug.png" image with 200x200 size */
/* and offset equals to "info.x" and "info.y" */
clip:true
Image {
id: img2
x: -info.x
y: -info.y
width: img.width
height: img.height
source: img.source
}
FastBlur {
anchors.fill: img2
source: img2
radius: 32
}
}
这是我的解决方案。此版本仅适用于矩形。 Item ShaderEffectSource 有助于创建这样的源矩形。
import QtQuick 2.3
import QtQuick.Window 2.2
import QtGraphicalEffects 1.0
Window {
visible: true
width: 600
height:600
Image {
id: image_bug
anchors.fill: parent
source: "images/Original_bug.png"
}
ShaderEffectSource {
id: effectSource
sourceItem: image_bug
anchors.centerIn: image_bug
width: 400
height: 400
sourceRect: Qt.rect(x,y, width, height)
}
FastBlur{
id: blur
anchors.fill: effectSource
source: effectSource
radius: 100
}
}
如果你需要其他形状,我想你可能需要应用一个mask-shader,先剪掉相关部分,然后再应用模糊。