Qml和模糊图像

时间:2012-01-17 12:00:52

标签: qt qml

我想使用QML实现模糊效果。 我找到了关于“效果:模糊”(Example)的引用,但在Qt 4.8中这不起作用。 据我所知,这是用C ++代码实现的。但是如何?

2 个答案:

答案 0 :(得分:13)

所有可视化QML项目都具有的effect属性接受作为QGraphicsEffect的子类的所有效果。 Qt 4.8附带QGraphicsBlurEffectQGraphicsColorizeEffectQGraphicsDropShadowEffectQGraphicsOpacityEffect。最初这些都是默认的QML版本,但是在开发的同时(在QtQuick的第一次公开发布之前),由于性能原因,它们被排除在外。要使它们再次工作,必须在其应用程序的C ++部分中包含以下代码行,例如在main函数中:

qmlRegisterType<QGraphicsBlurEffect>("Effects",1,0,"Blur");
qmlRegisterType<QGraphicsColorizeEffect>("Effects",1,0,"Colorize");
qmlRegisterType<QGraphicsDropShadowEffect>("Effects",1,0,"DropShadow");
qmlRegisterType<QGraphicsOpacityEffect>("Effects",1,0,"OpacityEffect");

这使得这些类可用于QML,因此可以使用它们:

import QtQuick 1.1
import Effects 1.0

Item {
    // [...]
    effect: Blur {
        blurRadius: 10.0
    }
}

这很有效,但在很多情况下,最终的表现确实是不可接受的。然后你应该尝试在ShaderEffectItem的帮助下实现模糊。通过这种方式,可以使用GLSL着色器程序实现图形效果,从而实现GPU渲染,这比基于QGraphicsEffect的旧方法更快。

答案 1 :(得分:1)

我不知道你在说什么,但是:Qt附带了一个名为Shader Effects的例子。顾名思义,它使用在QML中声明的GPU着色器来实现各种很酷的效果。