Page 1 sur 1

MYSTERIEUX Problème de PARASITES dans l'image !!! [RESOLUT]

Publié : jeu. 25/oct./2007 21:38
par Fortix
Bonsoir à tous :cry:

j'ais un véritable problème dans mon code:

j'éssais de créer un programme qui convertit des images avec un filtre un peu spécial dont l'explication n'est pas très utile finalement;

le problème se trouve lors de la création de l'image ainsi convertit qui se trouve juste à côté de l'image original:

il y a des points de "parasite" principalement "monochrome" de couleurs soit primaire soit secondaire et sa fait déja 3 jours que je m'arrache les cheuveux sur se problème qui semble pourtant être très facile à réparer

et il y a un second problème qui n'est pas trop important finalement:
lors de la sauvegarde de l'image ainsi convertit,....

Code : Tout sélectionner


Enumeration
    #Window_Principale    
EndEnumeration


Enumeration   
    #GImage_Initial    ;0
    ;#GImage_Convert    ;1
    
    #Button_Ouvrir
    #Button_Convert
    #Button_Sauve    
EndEnumeration


Enumeration    
    #Image_Artificiel ;-0
    #Image_Initial    ;-1
    #Image_Convert    ;-2
EndEnumeration



Global color

;- Image Plugins
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, 610, 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), #PB_Image_Border)
            ;ImageGadget(#GImage_Convert, 305, 40, 300, 300, ImageID(image), #PB_Image_Border)
            
            ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE")
            ButtonGadget(#Button_Convert, 305, 5, 75, 25, "CONVERTION")
            ButtonGadget(#Button_Sauve, 385, 5, 75, 25, "=>SAUVER ?")     
        EndIf
        
    EndIf
    
EndProcedure


;////////////////////////////////////////////////////////////



Procedure Filtre_01(couleur)

    Shared color

        VR=Red(couleur)
        VG=Green(couleur)
        VB=Blue(couleur)
       
        If VR <= 128
            Vrest= VR-128
            VR=VR+Vrest
        EndIf
        
        If VG <= 128
            Vrest= VG-128
            VG=VG+Vrest
        EndIf
         
        If VB <= 128
            Vrest= VB-128
            VB=VB+Vrest
        EndIf         
    
        If VR >= 128
            Vrest= VR-128
            VR=VR-Vrest
        EndIf
        
        If VG >= 128
            Vrest= VG-128
            VG=VG-Vrest
        EndIf
         
        If VB >= 128
            Vrest= VB-128
            VB=VB-Vrest
        EndIf
        
        color=RGB(VR,VG,VB) ;Pour un pixel

        
EndProcedure

;/////////////////////////////////////////////////////////////









Procedure Biphase(XG1,YG1,Pic,Largeur,Hauteur,XG2,YG2)

        If CreateImage(Pic,Largeur,Hauteur)  
                  
            StartDrawing(WindowOutput(0))
                  
                For y=YG1 To Hauteur        
                    For x=XG1 To Largeur                
                        color=Point(x,y)
                        
                        Filtre_01(color)
                        Plot(x+XG2,y ,color)
   
                    Next x         
                Next Y   
                
            StopDrawing()
                       
        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_$)
                    ResizeImage(1, 300, 300,  #PB_Image_Smooth)
                    SetGadgetState(0, ImageID(1))
                Else
                    MessageRequester("erreur","Impossible d'ouvrir l'image!",0)
                EndIf
            EndIf
              
            Case #Button_Convert
            
                Biphase(GadgetX(0),GadgetY(0),2,300,350,305,40)
                ;SetGadgetState(1,ImageID(2))
                
            Case #Button_Sauve
                
                file$=SaveFileRequester("", file$, "Fichier image|*.jpg;*.jpeg;*.png;*.bmp;*.tif;*.tga", 0)

                
                If file$
                    If SaveImage(2,file$)=0
                        Debug "Erreur de sauvegarde!!"
                    EndIf
                EndIf
                       
          
        EndSelect
    
    EndIf
  
Until Event = #PB_Event_CloseWindow 

CloseWindow(0)

End
;
surtout si vous avez la solution (même la moindre) surtout n'hesitez pas à la poster svp, car cela me permettrai d'avancer enfin, merci à tous :cry:

Publié : jeu. 25/oct./2007 22:08
par Backup
ce ne serai pas avec les images Jpg par hasard ? :)

si c'est le cas c'est normal, fait une recherche sur le mot Artifact JPG avec Google

Publié : jeu. 25/oct./2007 22:14
par Lna
Le premier problème, c'est déja de bien définir ses variables en choisisant le bon type. 8O
Rien qu'en ajoutant le type des variables locales, on obtient des résultats différents.

Par exemple :

Code : Tout sélectionner

Procedure Filtre_01(couleur)
  Protected VR.c,VG.c,VB.c,Vrest.c

Ou

Procedure Filtre_01(couleur)
  Protected VR.b,VG.b,VB.b,Vrest.b
Il faut bien tenir compte des débordements de variables selon leurs types, et s'assurer du bon fonctionnement du programme qui va les modifier. 8O

Le résultat de ton programme est intéressant. 8)

@ peluche

Publié : ven. 26/oct./2007 2:25
par case
je ne sais pas quel est le but de ton filtre mais les parasites sont dues a des valeurs depassant le maximum de valeurs pour les couleurs ce qui donnne des couleurs differente


ajoute cela

Code : Tout sélectionner

        If vr>255:vr=255:EndIf
        If vg>255:vg=255:EndIf
        If vb>255:vb=255:EndIf
        If vr<=0:vr=0:EndIf
        If vg<=0:vg=0:EndIf
        If vb<=0:vb=0:EndIf
juste avant

Code : Tout sélectionner

        color=RGB(VR,VG ,VB ) ;Pour un pixel

pour la sauvegarde de l'image a mon avis tu sauve une image vide puisque je ne te vois pas y ecrire dedans dans ton code


par contre pour tes sauvegarde tu devrais preciser quel format de sortie en fonction de l'extention

Code : Tout sélectionner

                file$=SaveFileRequester("", file$, "Fichier image|*.jpg;*.jpeg;*.png;*.bmp", 0)

               Select Right(LCase(file$),4)
               Case ".jpg","jpeg"
               		plugin=#PB_ImagePlugin_JPEG
               Case ".png"
               		plugin=#PB_ImagePlugin_PNG
               Case ".bmp"
            	   plugin=#PB_ImagePlugin_BMP
               Default       
               	   plugin=#PB_ImagePlugin_BMP
               EndSelect
               
                If file$
                    If SaveImage(2,file$,plugin)=0
                        Debug "Erreur de sauvegarde!!"
                    EndIf
                EndIf
comme ca :)

et au lieu d'utiliser une variable shared tu peux aussi faire un apel de ce genre

Code : Tout sélectionner

   Plot(x+XG2,y,Filtre_01(Point(x,y)))
avec un

Code : Tout sélectionner

  ProcedureReturn RGB(VR,VG ,VB ) ;Pour un pixel



ton code modifié

Code : Tout sélectionner


enumeration
    #Window_Principale   
EndEnumeration


Enumeration   
    #GImage_Initial    ;0
    ;#GImage_Convert    ;1
   
    #Button_Ouvrir
    #Button_Convert
    #Button_Sauve   
EndEnumeration


Enumeration   
    #Image_Artificiel ;-0
    #Image_Initial    ;-1
    #Image_Convert    ;-2
EndEnumeration



Global color

;- Image Plugins
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, 610, 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), #PB_Image_Border)
            ;ImageGadget(#GImage_Convert, 305, 40, 300, 300, ImageID(image), #PB_Image_Border)
           
            ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE")
            ButtonGadget(#Button_Convert, 305, 5, 75, 25, "CONVERTION")
            ButtonGadget(#Button_Sauve, 385, 5, 75, 25, "=>SAUVER ?")     
        EndIf
       
    EndIf
   
EndProcedure


;////////////////////////////////////////////////////////////



Procedure Filtre_01(couleur)


        VR=Red(couleur)
        VG=Green(couleur)
        VB=Blue(couleur)
       
        If VR <= 128
            Vrest= VR-128
            VR=VR+Vrest
        EndIf
        If VG <=128
            Vrest= VG-128
            VG=VG+Vrest
        EndIf
        If VB <= 128
            Vrest= VB-128
            VB=VB+Vrest
        EndIf         

                
        
        If VR >= 128
            Vrest= VR-128
            VR=VR-Vrest
        EndIf
       
        If VG >= 128
            Vrest= VG-128
            VG=VG-Vrest
        EndIf
         
        If VB >= 128
            Vrest= VB-128
            VB=VB-Vrest
        EndIf
        If vr>255:vr=255:EndIf
        If vg>255:vg=255:EndIf
        If vb>255:vb=255:EndIf
        If vr<=0:vr=0:EndIf
        If vg<=0:vg=0:EndIf
        If vb<=0:vb=0:EndIf
        

        ProcedureReturn RGB(VR,VG ,VB ) ;Pour un pixel
        

       
EndProcedure

;/////////////////////////////////////////////////////////////









Procedure Biphase(XG1,YG1,Pic,Largeur,Hauteur,XG2,YG2)

        If CreateImage(Pic,Largeur,Hauteur) 
                 
            StartDrawing(WindowOutput(0))
                 
                For y=YG1 To Hauteur       
                    For x=XG1 To Largeur               
                                               
                        Plot(x+XG2,y,Filtre_01(Point(x,y)))
   
                    Next x         
                Next Y   
               
            StopDrawing()
                       
        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_$)
                    ResizeImage(1, 300, 300,  #PB_Image_Smooth)
                    SetGadgetState(0, ImageID(1))
                Else
                    MessageRequester("erreur","Impossible d'ouvrir l'image!",0)
                EndIf
            EndIf
             
            Case #Button_Convert
           
                Biphase(GadgetX(0),GadgetY(0),2,300,350,305,40)
                ;SetGadgetState(1,ImageID(2))
               
            Case #Button_Sauve
               
                file$=SaveFileRequester("", file$, "Fichier image|*.jpg;*.jpeg;*.png;*.bmp", 0)

               Select Right(LCase(file$),4)
               Case ".jpg","jpeg"
               		plugin=#PB_ImagePlugin_JPEG
               Case ".png"
               		plugin=#PB_ImagePlugin_PNG
               Case ".bmp"
            	   plugin=#PB_ImagePlugin_BMP
               Default       
               	   plugin=#PB_ImagePlugin_BMP
               EndSelect
               
                If file$
                    If SaveImage(2,file$,plugin)=0
                        Debug "Erreur de sauvegarde!!"
                    EndIf
                EndIf
                       
         
        EndSelect
   
    EndIf
 
Until Event = #PB_Event_CloseWindow

CloseWindow(0)

End 


j'espère que t'avoir fait un peu avancé dans tes tirages de cheveux :)

Publié : ven. 26/oct./2007 11:19
par Fortix
UN GRAND MERCI à vous tous, :D
car vos réponses sont très pertinantes

UN TRES GRAND MERCI particulièrement à Monsieur @Case , qui a très franchement trouvé le problème et réparer mon filtre
:D :D
il ne me reste plus que le problème de la sauvegarde :x , mais j'en fais mon affaire personnel se coup si :twisted:

bref un grand merci, vous êtes tous super, franchement je me dis que j'aurais dus poster mon problème un peu avant car ça m'aurais permis d'économiser un peu de mes cheuveux :lol:

merci encore :D

Publié : ven. 26/oct./2007 18:31
par Chris
Trois jours à t'arracher les cheveux! 8O

Ton vrai nom, ce serait pas Sébastien Chabal, par hasard?

Publié : ven. 26/oct./2007 20:25
par Fortix
:lol: (en moin carré)

Publié : dim. 28/oct./2007 22:49
par Fortix
Rebonjour,

Je croix que je vais devoir vous resoliciter maleureusement :oops: ;

étant donné que je suis passé à un autre filre, je suis confronté à un problème presque similaire que celui du précedent sauf qu'il sagit de parasites noirs, j'ais pourtant pris le soin de bien préciser les valeurs
des variables en sorti :!:
en gros, il y a des points noirs là où il n'y a pas de pixel noir, j'ais peu être
loupé une combinaison de couleur dans ma procédure Filtre_02;

le problème se trouve dans la Procedure Filtre_02(r,v,b)

Code : Tout sélectionner

Enumeration 
    #Window_Principale    
EndEnumeration 

Enumeration    
    #GImage_Initial    ;0 
    ;#GImage_Convert    ;1 
    
    #Button_Ouvrir 
    #Button_Convert 
    #Button_Sauve    
EndEnumeration 

Enumeration    
    #Image_Artificiel ;-0 
    #Image_Initial    ;-1 
    #Image_Convert    ;-2 
EndEnumeration 

Global color 

;- Image Plugins 
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, 610, 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)) 
            ;ImageGadget(#GImage_Convert, 305, 40, 300, 300, ImageID(image), #PB_Image_Border) 
            
            ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE") 
            ButtonGadget(#Button_Convert, 305, 5, 75, 25, "CONVERTION") 
            ButtonGadget(#Button_Sauve, 385, 5, 75, 25, "=>SAUVER ?")      
        EndIf 
        
    EndIf 
    
EndProcedure 

;//////////////////////////////////////////////////////////// 

Procedure PrC(clr)

    v1=clr/2

EndProcedure

Procedure Filtre_01(couleur) 
    
        VR=Red(couleur) 
        VG=Green(couleur) 
        VB=Blue(couleur) 
        
    If couleur=0 
        ProcedureReturn 0
    Else       
        
        If VR < 128 
            Vrest= VR-128 
            VR=VR+Vrest
        EndIf 
        
        If VG < 128 
            Vrest= VG-128 
            VG=VG+Vrest
        EndIf 
        
        If VB < 128 
            Vrest= VB-128 
            VB=VB+Vrest
        EndIf          
 
        
        If vr>128
            vr=128
        EndIf 
        
        If vg>128
            vg=128
        EndIf 
        
        If vb>128
            vb=128
        EndIf 
        
        If vr<=0
            vr=0
        EndIf 
        
        If vg<=0
            vg=0
        EndIf
         
        If vb<=0
            vb=0
        EndIf 
;         
        ProcedureReturn RGB(VR,VG ,VB ) ;Pour un pixel 
    EndIf
               
EndProcedure 

Procedure Filtre_02(r,v,b)
    
    If r
        vr=120*r
        vlr=vr/255      
        br=1
    EndIf

    If v
        vv=120*v
        vlv=vv/255      
        bv=1
    EndIf
    
    If b
        vb=120*b
        vlb=vb/255      
        bb=1
    EndIf 
            
    tb=br+bv+bb
    
    Select tb
    
        Case 0
        
            d=0
        
        Case 1
        
            If vlr   
                d=vlr           
                        
            ElseIf vlv    
                d=vlv 
                                                 
            ElseIf vlb    
                d=vlb         
              
            EndIf
          
        Case 2
        
            If vlr=vlv Or vlr>vlv Or vlr<vlv  
                d=(vlr+vlv)/2           
                        
            ElseIf vlv=vlb Or vlv>vlb Or vlv<vlb    
                d=(vlv+vlb)/2 
                                                 
            ElseIf vlb=vlr Or vlb>vlr Or vlb<vlr    
                d=(vlb+vlr)/2         
              
            EndIf
        
        Case 3

            If vlr>vlv And vlr<vlb 
                d=vlv+vlb       
            
            ElseIf vlr<vlv And vlr>vlb 
                d=vlv+vlb             
            
            ElseIf vlr<vlv And vlv=vlb
                d=vlr+vlv
                                                            
            ElseIf vlv>vlr And vlv<vlb
                d=vlr+vlb       
            
            ElseIf vlv<vlr And vlv>vlb 
                d=vlr+vlb       
                
            ElseIf vlv<vlr And vlr=vlb
                d=vlv+vlr
                                                                      
            ElseIf vlb>vlr And vlb<vlv 
                d=vlr+vlv       
                
            ElseIf vlb<vlr And vlb>vlv  
                d=vlr+vlv      
            
            ElseIf vlb<vlr And vlr=vlv
                d=vlb+vlr            

            ElseIf vlr=vlv And vlv=vlb And vlr=vlb
                d=vlr+vlv           
                                        
            EndIf
        
    EndSelect       
    
    If d<0
        d=0
    EndIf
    
    If d>240
        d=240
    EndIf
    
    If d>=60 And d<120
        VRST=120-d
        ProcedureReturn RGB(r+VRST,v+VRST,b+VRST)
    EndIf
    
    If d<60
        ProcedureReturn RGB(20,20,20)
    EndIf
    
    If d>120
        VRST=d-120
        ProcedureReturn RGB(r-VRST,v-VRST,b-VRST)
    EndIf
    
EndProcedure

;///////////////////////////////////////////////////////////// 

Procedure Biphase(XG1,YG1,Pic,Largeur,Hauteur,XG2,YG2) 
        If CreateImage(Pic,Largeur,Hauteur)                  
            StartDrawing(WindowOutput(0)) 
                  
                For y=YG1 To Hauteur        
                    For x=XG1 To Largeur                
                                        
                        ;Plot(x+XG2,y,Filtre_01(Point(x,y))) 
                        
                        Plot(x+XG2,y,Filtre_02(Red(Point(x,y)),Green(Point(x,y)),Blue(Point(x,y))))
    
                    Next x          
                Next Y    
                
            StopDrawing()                        
        EndIf 
EndProcedure 

Procedure Pourcentage_(Largeur,Hauteur,Compa) 
    V_1 = Compa * Largeur
    V_2 = V_1 / Hauteur  
    ProcedureReturn V_2    
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)        
                                                                                                                                                                    
;                                         If L > 150                                          
;                                             ResizeImage(1, 200,Pourcentage_(L,H,200),#PB_Image_Smooth);:svf=1                                  
;                                         EndIf                               
;                                                                        
;                                         If H > 150
;                                             ResizeImage(1,Pourcentage_(L,H,200), 200,#PB_Image_Smooth);:svf=1                                     
;                                         EndIf
                                        
;                                         If L > 300                                          
;                                             ResizeImage(1, 200,Pourcentage_(L,H,200),#PB_Image_Smooth);:svf=1                                  
;                                         EndIf                               
;                                                                        
;                                         If H > 300
;                                             ResizeImage(1,Pourcentage_(L,H,200), 200,#PB_Image_Smooth);:svf=1                                     
;                                         EndIf
                
                    ResizeImage(1, 300, 300,  #PB_Image_Smooth) 
                    SetGadgetState(0, ImageID(1)) 
                Else 
                    MessageRequester("erreur","Impossible d'ouvrir l'image!",0) 
                EndIf 
            EndIf 
              
            Case #Button_Convert 
            
                Biphase(GadgetX(0),GadgetY(0),2,300, 339,305,40) 
                ;SetGadgetState(1,ImageID(2)) 
                
            Case #Button_Sauve 
                
                file$=SaveFileRequester("", file$, "Fichier image|*.jpg;*.jpeg;*.png;*.bmp", 0) 

               Select Right(LCase(file$),4)               
                   Case ".jpg","jpeg" 
                         plugin=#PB_ImagePlugin_JPEG 
                   Case ".png" 
                         plugin=#PB_ImagePlugin_PNG 
                   Case ".bmp" 
                      plugin=#PB_ImagePlugin_BMP 
                   Default        
                         plugin=#PB_ImagePlugin_BMP 
               EndSelect               
                If file$ 
                    If SaveImage(2,file$,plugin)=0 
                        Debug "Erreur de sauvegarde!!" 
                    EndIf 
                EndIf 
                                  
        EndSelect    
    EndIf 
Until Event = #PB_Event_CloseWindow 
CloseWindow(0) 
End 
si voulez plus de précision surtous n'hesiter pas à demander
et si vous pouvez également trouver le problème n'hésiter pas non plus!
encore merci :D

Problème [Résolut]

Publié : lun. 29/oct./2007 20:58
par Fortix
C'est bon j'ais résolut le problème :D , merci à vous :D

Publié : lun. 29/oct./2007 21:02
par case
quel etait le probleme ? j'aimerais bien voir le resultat de ton filtre sans le probleme :)

Publié : mar. 30/oct./2007 12:36
par Fortix
Oui bien sûr @Case:

Code : Tout sélectionner

Enumeration 
    #Window_Principale    
EndEnumeration 


Enumeration    
    #GImage_Initial    ;0 
    ;#GImage_Convert    ;1 
    
    #Button_Ouvrir 
    #Button_Convert 
    #Button_Sauve    
EndEnumeration 


Enumeration    
    #Image_Artificiel ;-0 
    #Image_Initial    ;-1 
    #Image_Convert    ;-2 
EndEnumeration 



Global color 

;- Image Plugins 
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, 610, 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)) 
            ;ImageGadget(#GImage_Convert, 305, 40, 300, 300, ImageID(image), #PB_Image_Border) 
            
            ButtonGadget(#Button_Ouvrir, 5, 5, 75, 25, "=>IMAGE") 
            ButtonGadget(#Button_Convert, 305, 5, 75, 25, "CONVERTION") 
            ButtonGadget(#Button_Sauve, 385, 5, 75, 25, "=>SAUVER ?")      
        EndIf 
        
    EndIf 
    
EndProcedure 

;//////////////////////////////////////////////////////////// 

Procedure PrC(clr)

    v1=clr/2

EndProcedure

Procedure Filtre_01(couleur) 
    
        VR=Red(couleur) 
        VG=Green(couleur) 
        VB=Blue(couleur) 
        
    If couleur=0 
        ProcedureReturn 0
    Else       
        
        If VR < 128 
            Vrest= VR-128 
            VR=VR+Vrest
        EndIf 
        
        If VG < 128 
            Vrest= VG-128 
            VG=VG+Vrest
        EndIf 
        
        If VB < 128 
            Vrest= VB-128 
            VB=VB+Vrest
        EndIf          
 
        
        If vr>128
            vr=128
        EndIf 
        
        If vg>128
            vg=128
        EndIf 
        
        If vb>128
            vb=128
        EndIf 
        
        If vr<=0
            vr=0
        EndIf 
        
        If vg<=0
            vg=0
        EndIf
         
        If vb<=0
            vb=0
        EndIf 
;         
        ProcedureReturn RGB(VR,VG ,VB ) ;Pour un pixel 
    EndIf
               
EndProcedure 




Procedure Filtre_02(r,v,b)
    
    If r
        vr=120*r
        vlr=vr/255      
        br=1
    EndIf

    If v
        vv=120*v
        vlv=vv/255      
        bv=1
    EndIf
    
    If b
        vb=120*b
        vlb=vb/255      
        bb=1
    EndIf 
     
       
    tb=br+bv+bb
    
    Select tb
    
        Case 0
        
            d=0
        
        Case 1
        
            If vlr   
                d=vlr           
                        
            ElseIf vlv    
                d=vlv 
                                                 
            ElseIf vlb    
                d=vlb         
              
            EndIf
          
        Case 2
        
            If vlr=vlv Or vlr>vlv Or vlr<vlv  
                d=(vlr+vlv)/2           
                        
            ElseIf vlv=vlb Or vlv>vlb Or vlv<vlb    
                d=(vlv+vlb)/2 
                                                 
            ElseIf vlb=vlr Or vlb>vlr Or vlb<vlr    
                d=(vlb+vlr)/2         
              
            EndIf
        
        Case 3

            If vlr>vlv And vlr<vlb ;Or vlr=vlb
                d=vlv+vlb       ;:Debug "Calcul R<"
            
            ElseIf vlr<vlv And vlr>vlb ;Or vlr=vlb
                d=vlv+vlb       ;:Debug "Calcul R2<"       
            
            ElseIf vlr<vlv And vlv=vlb
                d=vlr+vlv
             
            ElseIf vlr>vlv And vlv=vlb
                d=vlr+vlv
            
                                   
            
            ElseIf vlv>vlr And vlv<vlb ;Or vlv=vlb 
                d=vlr+vlb       ;:Debug "Calcul V<"
            
            ElseIf vlv<vlr And vlv>vlb ;Or vlv=vlb
                d=vlr+vlb       ;:Debug "Calcul V2<" 
                
            ElseIf vlv<vlr And vlr=vlb
                d=vlv+vlr

            ElseIf vlv>vlr And vlr=vlb
                d=vlv+vlr            
                    
                      
                
            ElseIf vlb>vlr And vlb<vlv ;Or vlb=vlv
                d=vlr+vlv       ;:Debug "Calcul B<"
                
            ElseIf vlb<vlr And vlb>vlv ;Or vlb=vlv   
                d=vlr+vlv       ;:Debug "Calcul B2<"
            
            ElseIf vlb<vlr And vlr=vlv
                d=vlb+vlr 

            ElseIf vlb>vlr And vlr=vlv
                d=vlb+vlr 
                
                
            ElseIf vlr=vlv And vlv=vlb And vlr=vlb
                d=vlr+vlv           
                    
            EndIf
        
    EndSelect       
    
    If d<0
        d=0
    EndIf
    
    If d>240
        d=240
    EndIf
    
    
    
    If d>=90 And d=<120
        VRST=120-d
        
        sr=r+VRST
        sv=v+VRST
        sb=b+VRST
        
        If sr>128
            sr=128
        EndIf
        
        If sv>128
            sv=128
        EndIf
        
        If sb>128
            sb=128
        EndIf
        
        ProcedureReturn RGB(sr,sv,sb)
    EndIf
    
    If d<90
        ProcedureReturn RGB(30,30,30)
    EndIf
    
;     If d=120
;         ProcedureReturn RGB(120,120,120)
;     EndIf
    
    
    If d>120
        VRST=d-120
        
        sr=r-VRST
        sv=v-VRST
        sb=b-VRST
        
        If sr>128
            sr=128
        EndIf
        
        If sv>128
            sv=128
        EndIf
        
        If sb>128
            sb=128
        EndIf
        ProcedureReturn RGB(sr,sv,sb)
    EndIf
    
EndProcedure


;///////////////////////////////////////////////////////////// 

Procedure Biphase(XG1,YG1,Pic,Largeur,Hauteur,XG2,YG2) 

        If CreateImage(Pic,Largeur,Hauteur) 
                  
            StartDrawing(WindowOutput(0)) 
                  
                For y=YG1 To Hauteur        
                    For x=XG1 To Largeur                
                                        
                        ;Plot(x+XG2,y,Filtre_01(Point(x,y))) 
                        
                        Plot(x+XG2,y,Filtre_02(Red(Point(x,y)),Green(Point(x,y)),Blue(Point(x,y))))
    
                    Next x          
                Next Y    
                
            StopDrawing() 
                        
        EndIf 

EndProcedure 


Procedure Pourcentage_(Largeur,Hauteur,Compa)
 
    V_1 = Compa * Largeur
    V_2 = V_1 / Hauteur
    
    ProcedureReturn V_2
    
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)        
                                                                                                                                                                    
;                                         If L > 150                                          
;                                             ResizeImage(1, 200,Pourcentage_(L,H,200),#PB_Image_Smooth);:svf=1                                  
;                                         EndIf                               
;                                                                        
;                                         If H > 150
;                                             ResizeImage(1,Pourcentage_(L,H,200), 200,#PB_Image_Smooth);:svf=1                                     
;                                         EndIf
                                        
;                                         If L > 300                                          
;                                             ResizeImage(1, 200,Pourcentage_(L,H,200),#PB_Image_Smooth);:svf=1                                  
;                                         EndIf                               
;                                                                        
;                                         If H > 300
;                                             ResizeImage(1,Pourcentage_(L,H,200), 200,#PB_Image_Smooth);:svf=1                                     
;                                         EndIf
                
                    ResizeImage(1, 300, 300,  #PB_Image_Smooth) 
                    SetGadgetState(0, ImageID(1)) 
                Else 
                    MessageRequester("erreur","Impossible d'ouvrir l'image!",0) 
                EndIf 
            EndIf 
              
            Case #Button_Convert 
            
                Biphase(GadgetX(0),GadgetY(0),2,300, 339,305,40) 
                ;SetGadgetState(1,ImageID(2)) 
                
            Case #Button_Sauve 
                
                file$=SaveFileRequester("", file$, "Fichier image|*.jpg;*.jpeg;*.png;*.bmp", 0) 

               Select Right(LCase(file$),4)
                
                   Case ".jpg","jpeg" 
                         plugin=#PB_ImagePlugin_JPEG 
                   Case ".png" 
                         plugin=#PB_ImagePlugin_PNG 
                   Case ".bmp" 
                      plugin=#PB_ImagePlugin_BMP 
                   Default        
                         plugin=#PB_ImagePlugin_BMP 
               EndSelect 
                
                If file$ 
                    If SaveImage(2,file$,plugin)=0 
                        Debug "Erreur de sauvegarde!!" 
                    EndIf 
                EndIf 
                                  
        EndSelect 
    
    EndIf 
  
Until Event = #PB_Event_CloseWindow 

CloseWindow(0) 

End 
J'attendais qu'on me le demande car je pensais que mon code intéressait personne :lol:

Note: j'ais désactivé le "Filtre_01" temporairement!!

parcontre j'aimerais avoir ton avis stp?