2012-01-17 22 views
5

QMLを使用してぼかし効果を実現したい。 "効果:ぼかし"についての参考文献を見つけましたが、Qt 4.8ではこれは動作しません。(Example) 私が知る限り、これはC++コードで実装されています。しかしどうですか?Qmlとぼかし画像

答えて

13

すべてのビジュアルQMLアイテムにはQGraphicsEffectのサブクラスであるすべてのエフェクトを受け入れることができる。effect属性。 Qt 4.8は、QGraphicsBlurEffectQGraphicsColorizeEffectQGraphicsDropShadowEffect、および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"); 

これはQMLにこれらのクラスを利用できるようにので1は次のようにそれらを使用することができます:

import QtQuick 1.1 
import Effects 1.0 

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

これは機能しますが、多くの場合、結果として生じるパフォーマンスは実際には受け入れられません。次に、ShaderEffectItemの助けを借りてぼかしを実装しようとする必要があります。そうすればGLSLシェーダプログラムでグラフィックエフェクトを実現し、GPUレンダリングを実現することができます。これは従来のQGraphicsEffectに比べて高速です。

1

あなたが話していることはわかりませんが、QtにはShader Effectsという名前の例があります。名前が示すように、QMLの中で宣言されたGPUシェーダを使用してあらゆる種類のクールな効果を実現します。

関連する問題