PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Traiter des images pour les rendre floues
Traiter des images pour les rendre floues
Iniciado por Dominique TRONCZYK, 29,oct. 2013 15:36 - 14 respuestas
Miembro registrado
72 mensajes
Publicado el 29,octubre 2013 - 15:36
Je cherche un moyen simple de traiter par lot une serie d'images contenues dans une base HF pour les rendre floues.
J'utiliserai ensuite les images floues en fond de fenêtre pour afficher un produit, un peu à la manière des images des albums dans l'appli W8 de Deezer.
Bien entendu, je ne souhaite pas alourdir trop le poids de l'installation de mon appli.
Quelqu'un connait-il un contrôle spécifique (gratuit ou payant) ?

Merci par avance.
Publicado el 29,octubre 2013 - 16:16
Bonjour Dominique

une manière simple pour perdre du détail est de changer de taille...

Donc (par exemple, et les tailles réelles sont à trouver) :
- tu charge une image qui fait 1024*768 dans un champ image qui n'en
fait que 640* 480, tu la sauve sur disque avec dsauveimage
- tu charge l'image qui fait 640*480 dans un champ qui fait 1024*768, et
tu sauve sur disque

ton image finale devrait être floue par rapport à celle de départ

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com


On 10/29/2013 9:36 AM, Dominique TRONCZYK ( wrote:
Je cherche un moyen simple de traiter par lot une serie d'images
contenues dans une base HF pour les rendre floues.
J'utiliserai ensuite les images floues en fond de fenêtre pour afficher
un produit, un peu à la manière des images des albums dans l'appli W8 de
Deezer.
Bien entendu, je ne souhaite pas alourdir trop le poids de
l'installation de mon appli.
Quelqu'un connait-il un contrôle spécifique (gratuit ou payant) ?

Merci par avance.
Miembro registrado
72 mensajes
Publicado el 29,octubre 2013 - 17:13
Bonjour Fabrice,
Je te remercie pour la réponse et je vais tester pour voir si j'obtiens bien un effet de type flou gaussien.
Miembro registrado
948 mensajes
Publicado el 30,octubre 2013 - 10:28
bonjour
je ne sais pas si cela va répondre à votre besoin, mais il existe dans le sdk de xnview (http://www.xnview.com/wiki/index.php/GFL_SDK) une fonction (gflGaussianBlur voir page 62 du manuel pdf), mais je ne pas du tout un spécialiste des images
Bon dev
Miembro registrado
948 mensajes
Publicado el 30,octubre 2013 - 10:40
suite
je confirme que c'est bien ce que vous recherchez (voir la démo)



Publicado el 30,octubre 2013 - 12:24
Bonjour,

Pour faire une image de fond d'écran, on peut flouter l'image d'origine ... mais je ne suis pas sûr que cela donne un confort visuel valable.
A mon avis, il vaut mieux éclaircir l'image d'origine.
Cf la fonction dModifieLuminosité()
Miembro registrado
72 mensajes
Publicado el 30,octubre 2013 - 13:21
Voilà le type d'effet souhaité (Copie écran appli Deezer en W8)
L'image retraitée en flou sert en fond d'écran et l'image originale est par dessus.



Publicado el 31,octubre 2013 - 11:44
Pourquoi ne pas jouer simplement sur la transparence ?

Eric

--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Publicado el 22,enero 2016 - 00:29
/// image flou
gnOpacite=7
IMG_apercu..Opacité=gnOpacite

/// image net
gnOpacite=100
IMG_apercu..Opacité=gnOpacite
Miembro registrado
11 mensajes
Publicado el 03,diciembre 2019 - 16:35
Bonjour,

Désolé d'exhumer un sujet aussi vieux, mais je me retrouve confronté à la même problématique et jouer sur l'opacité permet seulement de délaver l'image mais pas de la flouter ... l'objectif étant de pouvoir jouer sur le niveau de floutage de sorte à permettre de deviner l'image sans pour autant la voir précisément, ça ne suffit pas.

@Dominique TRONCZYK, avez-vous finalement trouvé une solution ?

Merci par avance,
Cdt,
Fabien

--
Cordialement,
Fabien
Miembro registrado
948 mensajes
Publicado el 07,diciembre 2019 - 16:26
bonjour
Peut-être que cce code vous aidera :
il faut 3 champs image IMG_ORIGINALE, IMG_BW, IMG_FLOUTEE ayant les mêmes caractéristiques
Hauteur, Largeur, Ligne, Colonne, CouleurRVB, CouleurUnie, ValeurGris, NiveauDeGris, i, Poids sont des entiers
Pixel, Coef est un tableau de 9 entiers

//La matrice (peut être changée
Coef[1] = -1; Coef[2] = -1; Coef[3]= -1
Coef[4] = -1; Coef[5] = 8 ; Coef[6]= -1
Coef[7] = -1; Coef[8] = -1; Coef[9]= -1

Hauteur = IMG_ORIGINALE..Hauteur
Largeur = IMG_ORIGINALE..Largeur

// Trduit l'image d'origine en b/w
dDébutDessin(IMG_BW, dEffacer)
FOR Ligne=1 _TO_ Hauteur
FOR Colonne=1 _TO_ Largeur
CouleurRVB = dPixelCouleur(IMG_ORIGINALE, Colonne, Ligne)
CouleurUnie = RVBRouge(CouleurRVB) + RVBVert(CouleurRVB) + RVBBleu(CouleurRVB)
ValeurGris = PartieEntière(CouleurUnie/3)
NiveauDeGris = RVB(ValeurGris, ValeurGris, ValeurGris)
//
dPoint(Colonne, Ligne, NiveauDeGris)
END
END

// Calcul du poids des coefs
Poids = 0
FOR i=1 _TO_ 9
Poids += Coef[i]
END

//
dDébutDessin(IMG_FLOUTEE,dEffacer)
FOR Ligne=2 _TO_ Hauteur-1
FOR Colonne=2 _TO_ Largeur-1

// récupération de la couleur des 8 pixels entourant le point
Pixel[1] = dPixelCouleur(IMG_BW, Colonne-1, Ligne-1)
Pixel[2] = dPixelCouleur(IMG_BW, Colonne, Ligne-1)
Pixel[3] = dPixelCouleur(IMG_BW, Colonne+1, Ligne-1)

Pixel[4] = dPixelCouleur(IMG_BW, Colonne-1, Ligne)
Pixel[5] = dPixelCouleur(IMG_BW, Colonne, Ligne) // point central
Pixel[6] = dPixelCouleur(IMG_BW, Colonne+1, Ligne)

Pixel[7] = dPixelCouleur(IMG_BW, Colonne-1, Ligne+1)
Pixel[8] = dPixelCouleur(IMG_BW, Colonne, Ligne+1)
Pixel[9] = dPixelCouleur(IMG_BW, Colonne+1, Ligne+1)

ValeurGris = 0
FOR i=1 _TO_ 9
ValeurGris += Coef[i] * RVBRouge(Pixel[i])
END

IF Poids = 0 THEN
ValeurGris = ValeurGris/1
ValeurGris = ValeurGris+128
ValeurGris = 255 - ValeurGris
ELSE
ValeurGris = ValeurGris/Poids
ValeurGris = ValeurGris+128
ValeurGris = 255 - ValeurGris
END

NiveauDeGris = RVB(ValeurGris, ValeurGris,ValeurGris)
dPoint(Colonne, Ligne, NiveauDeGris)
END
END


--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Miembro registrado
962 mensajes
Publicado el 08,diciembre 2019 - 10:28
Hello,
pour flouter des images à l'aide d'un filtre dans un projet Windev, on peut aussi utiliser les assemblages dotnet AForge.Net de licence LPGL.
Récupérer les bibliothèques AForge.NET ici :
http://www.aforgenet.com/framework/downloads.html choisir [ Download Libraries Only ]
Dans le répertoire Release du zip extraire les dll AForge.dll, AForge.Imaging.dll et AForge.Math.dll
Dans le projet Windev ajouter ces dll comme Assemblages Dotnet ainsi que l' assemblage System.Drawing
Voici le code pour sélectionner une image, la flouter avec un filtre flou gaussien et la sauvegarder en jpeg qualité 75%.
MonImage est une System.Drawing.Image dynamique
sFichier est une chaîne = fSélecteurImage("", "", "Sélectionnez une image...")
SI sFichier<>"" ALORS
MonImage = Image.FromFile(sFichier)
MonFiltre est un GaussianBlur( 5 , 50 )
MonFiltre.ApplyInPlace(MonImage)
MonImage.Save(sFichier + "_floue.jpg", ImageFormat.Jpeg);
FIN


Image Originale :




Image Floutée :





--
Ami calmant, J.P
Miembro registrado
948 mensajes
Publicado el 08,diciembre 2019 - 14:14
Bonjour
J'ai revu le code car il faisait plus de la détection de contour que de "floutage"
// Le principe de l’algorithme est donc de diviser l’image en blocs carrés de largeur
// n pixels. Les composantes R, V, et B de chacun des n*n pixels d’un bloc sont remplacés
// par leur moyenne (une moyenne de n*n valeurs par composante)
n, Hauteur, Largeur, Ligne, Colonne, l, c, CouleurRVB, MoyR, MoyV, MoyB sont des entiers

n = 4

IF n < 2 THEN n = 2
Hauteur = IMG_ORIGINALE..Hauteur
Largeur = IMG_ORIGINALE..Largeur

dDébutDessin(IMG_FLOUTEE, dEffacer)

FOR Ligne=1 _TO_ Hauteur-n STEP n
FOR Colonne=1 _TO_ Largeur-n STEP n
MoyR=0; MoyV=0; MoyB=0
FOR i=1 _TO_ n*n
l = PartieEntière((i-1)/n)
c = Modulo(i-1, n)
CouleurRVB = dPixelCouleur(IMG_ORIGINALE, Colonne+c, Ligne+l)
MoyR += RVBRouge(CouleurRVB)
MoyV += RVBVert(CouleurRVB)
MoyB += RVBBleu(CouleurRVB)
END
MoyR = MoyR/(n*n); MoyV = MoyV/(n*n); MoyB=MoyB/(n*n)
CouleurRVB = RVB(MoyR, MoyV, MoyB)
FOR i=1 _TO_ n*n
l = PartieEntière((i-1)/n)
c = Modulo(i-1, n)
dPoint(Colonne+c, Ligne+l, CouleurRVB)
END
END
END

exemples : original, n=2, n=3, n=4













--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Miembro registrado
1.402 mensajes
Publicado el 20,enero 2020 - 19:38
Bonjour Jurassic, j'ai essayé ton code et l'objet Image de la ligne suivante n'a pas de propriété 'FromFiles', est-ce que j'ai oublié quelque chose?

MonImage = Image.FromFile(sFichier)

Merci !

--
Jean Turcotte
WX 25
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Miembro registrado
1.402 mensajes
Publicado el 20,enero 2020 - 19:43
Pour corriger le probleme, j'ai du préciser le chemin avec;

MonImage = AForge.Imaging.Image.Fromfile(sFichier)

Et ca fonctionne tres bien d'ailleurs, Merci:)

--
Jean Turcotte
WX 25
Android 8.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram