4

Qtの画像にモーションブラーを追加する簡単な解決策はありますか?ぼかしについての良いチュートリアルは見つかりませんでした。わかりやすく、ぼかし角度を変えられたら本当にいいものが必要です。

4

1 に答える 1

2

Qtにはモーションブラーフィルターがありません。QGraphicsBlurEffect;のコードを見ました。それ自体が(指数ブラー)QPixmapBlurEffectと呼ばれる内部ヘルパーメソッドを使用するものを使用します。expblur

expblurそれ自体が1次元のブラー効果(X方向のモーションブラー、メソッドqt_blurrow)を2回使用します。2つのぼかしの間で画像を90度回転し、その後回転して戻します。

したがって、実際には、Qtはモーションブラー効果がありますが、これは内部のみです。だからあなたはあなた自身の効果を書く必要があります。これを行うには、のコードを見てくださいqt_blurrrow。これは、のQtソースにありsrc/gui/qpixmapfilter.cppます。これは、線形フィルターではなく指数関数的なブラーフィルターであるため、フィルターに優れた品質を提供します。

Qtソースコードを深く掘り下げたくない場合は、この擬似コードを最初に使用してください。

foreach pixel (x, y) in image {
    for dx = -r to r with x+dx within image {
        for dy = -r to r with y+dy within image {
            Add pixel (x+dx, y+dy) of the source image with ↩
            factor (matrix[dx, dy]) to the target image.
        }
    }
}

ここで、行列は次のように定義できます(半径2の水平モーションブラーの場合)。

0   0   0   0   0
0   0   0   0   0
0.1 0.2 0.4 0.2 0.1
0   0   0   0   0
0   0   0   0   0

すべてのエントリの合計は1である必要があることに注意してください。そうでない場合は、色をマトリックスエントリの合計で割る必要があります。

αに任意の角度(90度のステップだけでなく)を許可したい場合、与えられた半径rと角度αに対してこの行列を作成することは困難です。[編集:このようなマトリックスを簡単に生成するには、コメント3を参照してください。]

于 2012-05-20T20:23:32.137 に答える