문제
QT의 이미지에 모션 블러를 추가하는 간단한 해결책이 있습니까?흐림에 대한 좋은 튜토리얼을 찾지 못했습니다.나는 정말로 단순한 것을 필요로하고, 이해할 수있는 것, 나는 흐림 각도를 바꿀 수 있다면 정말로 좋을 것입니다.
해결책
Qt에는 모션 블러 필터가 없습니다. 나는 QGraphicsBlurEffect
의 코드를 보았습니다. QPixmapBlurEffect
(지수 흐림)라는 내부 도우미 메서드를 사용하는 expblur
를 사용합니다.
expblur
자체 자체는 1 차원 블러 효과 (모션 블러, qt_blurrow
의 모션 블러)를 두 번 사용합니다. 두 번의 블러 사이에서 90도 사이의 이미지를 회전시켜 이후로 회전합니다.
그래서 실제로 qt 은 동작 흐림 효과가 있지만 이는 내부적 인 것입니다. 그래서 당신은 자신의 효과를 쓸 필요가 있습니다. 이렇게하려면 qt_blurrrow
에서 QT 소스에서 찾을 수있는 src/gui/qpixmapfilter.cpp
의 코드를 살펴보십시오. 이렇게하면 필터에 대한 좋은 품질을 제공합니다.
Qt 소스 코드를 깊이 깊이 깊이 깊이 가고 싶지 않으면이 의사 코드를 시작 : 으로 가져 가십시오.
.
여기서 매트릭스 가이 (반경 2 인 수평 동작 흐림)의 경우 매트릭스가 정의 될 수 있습니다.
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.
}
}
}
.
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이어야하거나 매트릭스 항목의 합계로 색상을 나누어야합니다.
주어진 반경 R과 각도 α에 대한이 매트릭스를 구축하면 α에 대한 임의의 각도 (90 도의 단계뿐만 아니라)를 허용하려는 경우 어렵습니다. [편집 : 이러한 매트릭스가 쉬운 세대에 대해서는 코멘트 3을 참조하십시오.]