Pregunta

¿Existe una solución sencilla para agregar desenfoque de movimiento a una imagen en Qt?No he encontrado ningún buen tutorial sobre el desenfoque.Necesito algo realmente simple, que pueda entender y sería muy bueno si pudiera cambiar los ángulos de desenfoque.

¿Fue útil?

Solución

Qt no tiene un filtro de desenfoque de movimiento.Miré el código de QGraphicsBlurEffect;usa QPixmapBlurEffect que a su vez utiliza un método auxiliar interno llamado expblur (desenfoque exponencial).

expblur En sí mismo utiliza un efecto de desenfoque unidimensional (desenfoque de movimiento en la dirección X, método qt_blurrow) dos veces.Gira la imagen entre los dos desenfoques 90 grados y luego la gira hacia atrás.

Entonces, en realidad, Qt tiene un efecto de desenfoque de movimiento, pero esto es solo interno.Entonces necesitas escribir tu propio efecto.Para ello, eche un vistazo al código de qt_blurrrow, que puede encontrar en las fuentes de Qt en src/gui/qpixmapfilter.cpp.Esto le dará una buena calidad al filtro, ya que es un filtro de desenfoque exponencial en lugar de uno lineal.

Si no desea profundizar tanto en el código fuente de Qt, tome este pseudocódigo como comienzo:

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.
        }
    }
}

donde la matriz podría definirse así (para desenfoque de movimiento horizontal con radio 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

Observe que la suma de todas las entradas tiene que ser 1, o debe dividir los colores por la suma de las entradas de la matriz.

Construir esta matriz para un radio r dado y un ángulo α es difícil cuando se quieren permitir ángulos arbitrarios para α (no solo pasos de 90 grados).[EDITAR:Consulte el comentario 3 para obtener una generación sencilla de dicha matriz.]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top