Qml和模糊图像

Dco*_*cow 5 qt qml

我想用QML实现模糊效果.我找到了关于"效果:模糊"的参考文献(例子)但是在Qt 4.8中这不起作用.据我所知,这是用C++代码实现的.但是怎么样?

seb*_*sgo 13

effect所有视觉QML项目都具有的属性接受作为子类的所有效果QGraphicsEffect.Qt的4.8附带QGraphicsBlurEffect,QGraphicsColorizeEffect,QGraphicsDropShadowEffect,和QGraphicsOpacityEffect.最初这些都是默认的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");
Run Code Online (Sandbox Code Playgroud)

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

import QtQuick 1.1
import Effects 1.0

Item {
    // [...]
    effect: Blur {
        blurRadius: 10.0
    }
}
Run Code Online (Sandbox Code Playgroud)

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