Page 1 sur 1
Flouter une image?
Publié : mar. 30/oct./2007 19:16
par Fortix
Bonsoirs à tous,
Y a t il un moyen de flouter une image qu'on vient de créer façon Photoshop "Flou Gaussien"?
Merci beaucoup

Publié : mar. 30/oct./2007 19:40
par Ar-S
Niveau programmation je ne sais pas trop mais niveau théorie,
je me dis qu'en copiant l'image deux fois et en les rendant transparantes à 70% (ou moins) puis en décollant une copie de X pixels à droite puis de une de X pixels à gauche, ça pourrait peut être le faire.
Publié : mar. 30/oct./2007 19:55
par case
pour flouter une image c'est simple :
pour chaque pixel de l'image tu fais la moyenne des pixel l'entourant
pour bien faire tu dois toujours prendre les valeur par raport a l'image d'origine pour eviter de flouter par raport a une valeur deja floutée tu dois aussi prendre en compte que les bords de l'image on moins de pixel autours
pour un flou gaussien tu definit le rayon dans laquelle seront pris les valeurs un exemple sur une un care de 3x3 valeurs x est le pixel traité y sont les pixel alentours
123 xyo 323 yxy 333 oyx 334 yyo 334 yyy 334 oyy 334 ooo 334 ooo 334 ooo 334
456 yyo 456 yyy 456 oyy 456 xyo 456 yxy 456 oyx 455 yyo 455 yyy 455 oyy 455
789 ooo 789 ooo 789 ooo 789 yyo 789 yyy 789 oyy 789 xyo 689 yxy 669 oyx 667
cela reduit la difference entre les couleurs et donc floute l'image
x=(x+somme des y)/(nombre de y+1)
attention tu dois toujours te referer a l'image originale pour chaque point sinon tu vas faire la moyenne a partir de points deja modifies et donc avoir un resultat faussé.
Publié : mar. 30/oct./2007 19:57
par Fortix
Salut @r-s
figure toi que j'ais déjà penser à cette solution, mais à mon niveau ça va être très dure car je pense qu'il faut super poser une copie de l'image sur une autre donc il faut recrée la même image dans un "FlipBuffer"(je l'ais mal écris

) et ensuite il faut l'a rendre transparente; c'est une technique que j'utilisais avec Photoshop pour ne pas modifier la luminositée des pixels mais très franchement se n'est pas très jolie comme flou; à ce propos j'ais fais un point de départ:
Code : Tout sélectionner
Enumeration
#Window_Principale
EndEnumeration
Enumeration
#GImage_Initial
#Button_Ouvrir
EndEnumeration
Enumeration
#Image_Artificiel ;-0
#Image_Initial ;-1
#Image_Convert ;-2
EndEnumeration
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
UseJPEGImageEncoder()
UsePNGImageEncoder()
If CreateImage(0, 300, 300 )
StartDrawing(ImageOutput(0))
Box(0, 0, 300, 300, $000000 )
StopDrawing()
EndIf
Procedure Open_Window_Principale(image)
If OpenWindow(#Window_Principale, 0, 0, 304, 350, "MConV", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
SetWindowColor(0,RGB(255,128,0))
If CreateGadgetList(WindowID(#Window_Principale))
ImageGadget(#GImage_Initial, 2, 40, 300, 300, ImageID(image))
ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE")
EndIf
EndIf
EndProcedure
Open_Window_Principale(0)
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
Select GadgetID
Case #Button_Ouvrir
fichier_$ = OpenFileRequester( "Recherche image", "", "Fichier image|*.jpg;*.jpeg;*.png;*.bmp;*.tif;*.tga", 0)
If fichier_$
Taille_File = FileSize(fichier_$)
If LoadImage( 1, fichier_$)
L = ImageWidth(1)
H = ImageHeight(1)
ResizeImage(1, 300, 300, #PB_Image_Smooth)
SetGadgetState(0, ImageID(1))
Else
MessageRequester("erreur","Impossible d'ouvrir l'image!",0)
EndIf
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
CloseWindow(0)
End
pour ceux qui veulent se lancer dans l'aventure; mais je sais déjà que "l'usine à gaz" sera inévitable

!!
Publié : mar. 30/oct./2007 20:05
par ATHOW
J'ai fait ça l'an dernier en cours de traitement d'image, mais j'aurais pas trop le temps de transposer le tout en PureBasic, désolé...
Tiens moi au courant si tu veux les sources (Java).
En Pure, l'usine à gaz est évitable grace aux sprite3Ds, mais ce n'est plus du tout le même algo ! L'idée : afficher plusieurs fois l'image, à degrés de transparence égaux, mais légérement dézoomée à chaque fois, et puis refaire un GrabSprite sur le tout...
Publié : mar. 30/oct./2007 21:50
par Anonyme
cherche le post "SuperSprite3D" , dedans y a une fct° qui fait cela.
Publié : mar. 30/oct./2007 22:42
par Fortix
Ha vous êtes super les gars
sympa la proposition de la source en java mais je croix que je ne ferais pas un très bon interpreteur entre PB et JAVA
