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