Page 1 sur 2

Effet sur des images

Publié : jeu. 29/janv./2004 9:52
par Le Soldat Inconnu
Salut,

j'attaque un gros message pour donner qlq effet que l'on peut réaliser sur des images tel que du flou, du contraste, etc...

Chaque code marche avec un image nommé "Effet.jpg" qui va falloir placer avec le code (sinon, le choix de l'image est au début du code). éviter d'en prendre une trop grande car le temps de calul augmente vite.

Pour voir apparaître l'effet sur l'image, il faut cliquer dessus. et pour augmenter l'effet, il faut recliquer et etc...

voilà donc je commence à balancer les codes

Publié : jeu. 29/janv./2004 9:52
par Le Soldat Inconnu
Ajout de couleur

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

; Couleur d'ajout
Couleur_Ajout = RGB(20, 255, 20)

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Ajout de couleur")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  ; On initialise le niveau de flou
  Niveau.f = 0.1
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Pixel(x, y)
            Rouge.f = Red(couleur)
            Vert.f = Green(couleur)
            Bleu.f = Blue(couleur)
            
            ; On ajoute la nouvelle couleur
            Rouge = Rouge + Niveau * Red(Couleur_Ajout)
            Vert = Vert + Niveau * Green(Couleur_Ajout)
            Bleu = Bleu + Niveau * Blue(Couleur_Ajout)
            
            ; On recalcule la nouvelle couleur
            Couleur = RGB(Int(Rouge / (Niveau + 1)), Int(Vert / (Niveau + 1)), Int(Bleu / (Niveau + 1)))
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
      ; on augmente le niveau de flou
      Niveau + 0.1
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:53
par Le Soldat Inconnu
Effet de contraste

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

; Couleur d'ajout
Couleur_Ajout = RGB(20, 255, 20)

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Contraste")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  ; On initialise le niveau de contraste
  Niveau.f = 0.1
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Pixel(x, y)
            Rouge.f = Red(couleur)
            Vert.f = Green(couleur)
            Bleu.f = Blue(couleur)
            
            ; On augmente le contraste
            Rouge = Rouge * (Niveau * Rouge / 255 + 1 - Niveau / 2)
            If Rouge > 255 : Rouge = 255 : EndIf
            Vert = Vert * (Niveau * Vert / 255 + 1 - Niveau / 2)
            If Vert > 255 : Vert = 255 : EndIf
            Bleu = Bleu * (Niveau * Bleu / 255 + 1 - Niveau / 2)
            If Bleu > 255 : Bleu = 255 : EndIf
            
            ; On recalcule la nouvelle couleur
            Couleur = RGB(Rouge, Vert, Bleu)
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
      ; on augmente le niveau de contraste
      Niveau + 0.1
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:53
par Le Soldat Inconnu
Effet de flou

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Flou")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  ; On initialise le niveau de flou
  Niveau = 1
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y et alentour
            Rouge = 0
            Vert = 0
            Bleu = 0
            NbPixel = 0
            For Px = -Niveau To Niveau
              For Py = -Niveau To Niveau
                
                If Px + x >= 0 And Px + x < ImageX
                  If Py + y >= 0 And Py + y < ImageY
                    ; on fait le mélange des couleurs entre le point en x,y et ceux qui sont à sont alentour
                    Couleur = Pixel(Px + x, Py + y)
                    Rouge = Rouge + Red(couleur)
                    Vert = Vert + Green(couleur)
                    Bleu = Bleu + Blue(couleur)
                    NbPixel + 1
                  EndIf
                EndIf
                
              Next
            Next
            
            ; On recalcule la nouvelle couleur
            Couleur = RGB(Rouge / NbPixel, Vert / NbPixel, Bleu / NbPixel)
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
      ; on augmente le niveau de flou
      Niveau + 1
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:54
par Le Soldat Inconnu
Effet de luminosité

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

; Couleur d'ajout
Couleur_Ajout = RGB(20, 255, 20)

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Luminosité")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  ; On initialise le niveau de luminosité
  Niveau.f = 0.1
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Pixel(x, y)
            Rouge.f = Red(couleur)
            Vert.f = Green(couleur)
            Bleu.f = Blue(couleur)
            
            ; On augmente la luminosité
            Rouge = Rouge * (Niveau + 1)
            If Rouge > 255 : Rouge = 255 : EndIf
            Vert = Vert * (Niveau + 1)
            If Vert > 255 : Vert = 255 : EndIf
            Bleu = Bleu * (Niveau + 1)
            If Bleu > 255 : Bleu = 255 : EndIf
            
            ; On recalcule la nouvelle couleur
            Couleur = RGB(Rouge, Vert, Bleu)
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
      ; on augmente le niveau de luminosité
      Niveau + 0.1
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:54
par Le Soldat Inconnu
Effet de négatif

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

; Couleur d'ajout
Couleur_Ajout = RGB(20, 255, 20)

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Négatif")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Pixel(x, y)
            Rouge.f = Red(couleur)
            Vert.f = Green(couleur)
            Bleu.f = Blue(couleur)
            
            ; On augmente met en négatif
            Rouge = 255 - Rouge
            Vert = 255 - Vert
            Bleu = 255 - Bleu
            
            ; On recalcule la nouvelle couleur
            Couleur = RGB(Rouge, Vert, Bleu)
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:55
par Le Soldat Inconnu
Effet de noir et blanc

Code : Tout sélectionner

#img = 0
#Barre = 1

; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()

; Couleur d'ajout
Couleur_Ajout = RGB(20, 255, 20)

If OpenWindow(0, 0, 0, ImageX, ImageY + 20, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Noir et blanc")
  
  If CreateGadgetList(WindowID())
    ImageGadget(#img, 0, 0, ImageX, ImageY, UseImage(#img))
    ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  EndIf
  
  ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  UseImage(#img)
  StartDrawing(ImageOutput())
    For Px = 0 To ImageX
      For Py = 0 To ImageY
        Pixel(Px, Py) = Point(Px, Py)
      Next
      ; on fait progresser la barre
      SetGadgetState(#Barre, Px)
    Next
  StopDrawing()
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
      
      UseImage(#img)
      StartDrawing(ImageOutput()) ; on dessine sur l'image
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Pixel(x, y)
            Rouge = Red(couleur)
            Vert = Green(couleur)
            Bleu = Blue(couleur)

                        
            ; On recalcule la nouvelle couleur en transformant en noir et blanc
            Couleur = (Rouge + Vert + Bleu) / 3
            Couleur = RGB(Couleur, Couleur, Couleur)
            
            ; si la taille du nouveau pixel est positive
            Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            
            ; on se déplace sur l'image en y de la taille d'un pixel
            y = y + 1
            
          Until y >= ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en x de la taille d'un pixel
          x = x + 1
          ; on fait progresser la barre
          SetGadgetState(#Barre, x)
          
        Until x >= ImageX ; si on a traité toutes les lignes de l'image
        
      StopDrawing()
      
      ; on réaffiche l'image
      SetGadgetState(#img, UseImage(#img))
      
      ; on augmente le niveau de flou
      Niveau + 0.1
      
    EndIf
  Until Event = #WM_close ; on clique sur la croix, fin du prog
  
EndIf

Publié : jeu. 29/janv./2004 9:56
par Le Soldat Inconnu
Effet de pixelisation

c'est le dernier pour l'instant mais rien ne vous empêche d'en codé d'autre :wink:

Code : Tout sélectionner

; on charge l'image
UseJPEGImageDecoder()
LoadImage(0, "Effet.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth()
ImageY = ImageHeight()


If OpenWindow(0, 0, 0, ImageX, ImageY, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Pixellisation")
  ; on commence le dessin
  
  StartDrawing(WindowOutput())
    
    ; affichage de l'image
    DrawImage(UseImage(0), 0, 0)
    
    ; niveau de pixellisation mis à 1 (pas de pixellisation)
    niveau = 1
    
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #WM_LButtonDown ; si on clique sur le bouton gauche de la souris
        
        ; on multiplie par 2 le niveau de pixellisation pour faire des pixels de 2 fois la taille normale
        ; en fait, niveau représente la taille des pixels avec laquelle on va pixelliser l'image
        niveau = niveau * 2
        
        x = 0 ; on se place en x=0 sur l'image
        
        Repeat
          
          y = 0 ; on se place en y=0 sur l'image
          
          Repeat
            
            ; on récupère la couleur du point en x et y
            Couleur = Point(x, y)
            
            ; on met la taille en x nouveau pixel égale au niveau de pixellisation
            TailleX = Niveau
            
            ; si la taille du nouveau pixel fait que l'on sort de l'image, on réduit la taille en x du nouveau pixel
            If x + Niveau > ImageX
              TailleX = ImageX - x
            EndIf
            
            ; de même que pour x qui est au dessus
            TailleY = Niveau
            If y + Niveau > ImageY
              TailleY = ImageY - y
            EndIf
            
            ; si la taille du nouveau pixel est positive
            If TailleX > 0 And TailleY > 0
              Box(x, y, TailleX, TailleY, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
            EndIf
            
            ; on se déplace sur l'image en y de la taille d'un pixel (la taille du pixel est représenté par niveau)
            ; on avance de pixel en pixel (en fait, tous les 2 pixel par rapport à l'image affiché car le pixel intermédiaire sera recouvert par le nouveau pixel qui est 2 fois pus gros
            ; pour chaque pixel, on récupère la couleur
            ; puis on afiche le nouveau pixel 2 plus gros que celui affiché
            y = y + niveau
            
          Until y > ImageY ; si on a finit la colonne de l'image placé en x
          
          ; on se déplace sur l'image en y de la taille d'un pixel
          x = x + niveau
          
        Until x > ImageX ; si on a traité toutes les lignes de l'image
        
      EndIf
    Until Event = #WM_close ; on clique sur la croix, fin du prog
  StopDrawing()
EndIf


Publié : dim. 02/déc./2007 15:52
par Fortix
Salutation, aurais tu une version du code pour la Saturation en PB V4 bien sûr (quoique sinon je ferais la reconversion!!),,

Note: augmenter ou Diminuer sans pour autant modifier la luminositée

Merci soldat :D

Re: Effet sur des images

Publié : sam. 09/juil./2011 10:15
par blendman
Encore une fois, merci beaucoup pour ces codes qui me seront super utile pour mon logiciel 2D animatoon :).

Je me suis permis d'essayer de réaliser un système de saturation/désaturation.
Je ne sais pas ce qu'il vaut, mais je poste l'exemple (dérivé du code du LSI, bien sûr)

Code : Tout sélectionner

;{ infos
; Code d'origine Le Soldat Inconnu (effet noir et blanc)
; modifié par Blendman 07/2011
; PB 4.60 
;}

;{ enumeration - constantes
#img = 0 ; image et image gadget
#Barre = 1
#track= 2
;}

;{ initialisation et images
; on charge l'image
UseJPEGImageDecoder()
LoadImage(#img, "1.jpg")

; récupère la dimension de l'image
ImageX = ImageWidth(#img)
ImageY = ImageHeight(#img)
If imageX<310 
  screenX = 310
Else
  screenX = ImageX
EndIf
;}

;{ variables, globales
Global clic.b
; On initialise le niveau de contraste
Niveau.f = 1
niveauplus.f = 0.1
sature = 1
;}

;{ macros
  Macro couleurz()
    If bleu >255 : bleu = 255 : ElseIf bleu <0 : bleu = 0 : EndIf           
    If rouge >255 : rouge = 255 : ElseIf rouge <0 : rouge = 0 : EndIf           
    If vert >255 : vert  = 255 : ElseIf vert  <0 : vert  = 0 : EndIf 
  EndMacro  
;}
  
;{ open window et gadgets
If OpenWindow(0, 0, 0, screenX, ImageY + 60,"saturation/désaturation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ;ajout des gadgets
  ImageGadget(#img, 0, 0, ImageX, ImageY, ImageID(#img)) 
  ProgressBarGadget(#Barre, 0, ImageY + 2, ImageX, 18, 0, ImageX)
  TrackBarGadget(#track, 3, imageY+30, screenX-5 ,20, 0,200)
  SetGadgetState(#track,100)
    
 ; On récupère l'image
  Dim Pixel.l(ImageX, ImageY)
  StartDrawing(ImageOutput(#img))
  For Px = 0 To ImageX-1
    For Py = 0 To ImageY-1
      Pixel(Px, Py) = Point(Px, Py)
    Next
    ; on fait progresser la barre
    SetGadgetState(#Barre, Px)
  Next
  StopDrawing()  
  ;}
  
;{ boucle principale
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case 2         
            Niveau = (GetGadgetState(#track)/100)         
            If niveau >1
              niveau+niveau*0.1
              sature = 1
            ElseIf niveau<1 And niveau >=0
              sature = -1
            EndIf
    
            StartDrawing(ImageOutput(#img)) ; on dessine sur l'image
            
            x = 0 ; on se place en x=0 sur l'image
            
            Repeat
              
              y = 0 ; on se place en y=0 sur l'image
              
              Repeat
                ; on récupère la couleur du point en x et y
                Couleur = Pixel(x, y)
                Rouge = Red(couleur)
                Vert = Green(couleur)
                Bleu = Blue(couleur)
                                
                ; On recalcule la nouvelle couleur en saturant ou en désaturant
                rouge1 =rouge
                vert1=vert
                bleu1=bleu
                couleur1 = (rouge1+ vert1+ bleu1)/3           
                
                rouge1 = Red(couleur1)
                vert1 = Red(couleur1)
                bleu1 = Red(couleur1)
                
                Rouge = Rouge1 * (1-niveau) + Rouge * (niveau)
                Vert = Vert1 * (1-niveau) + Vert * (niveau)
                Bleu = Bleu1 * (1-niveau) + Bleu * (niveau)
                couleurz()
                
                If sature = -1
                  If niveau <=1 And niveau >0
                    Couleur = RGB(rouge,vert,bleu)             
                  EndIf
                ElseIf sature = 1
                  Couleur = RGB(rouge,vert,bleu)
                EndIf
                
                If sature = -1 And niveau <=0
                  Couleur = Pixel(x, y)
                  Rouge = Red(couleur)
                  Vert = Green(couleur)
                  Bleu = Blue(couleur)
                  Couleur = (Rouge + Vert + Bleu) /3
                  Couleur = RGB(Couleur, Couleur, Couleur)
                EndIf
                
                
                ; si la taille du nouveau pixel est positive
                Plot(x, y, Couleur) ; on dessine un carré qui fait le nouveau pixel de la même couleur que celle récupéré en x et y
                
                ; on se déplace sur l'image en y de la taille d'un pixel
                y = y + 1
                
              Until y >= ImageY ; si on a finit la colonne de l'image placé en x
              
              ; on se déplace sur l'image en x de la taille d'un pixel
              x = x + 1

              ; on fait progresser la barre
              SetGadgetState(#Barre, x)
              
            Until x >= ImageX ; si on a traité toutes les lignes de l'image
            
            StopDrawing()
            
            ; on réaffiche l'image
            SetGadgetState(#img, ImageID(#img))       
            
        EndSelect         
    EndSelect
    
  Until Event = #PB_Event_CloseWindow ; on clique sur la croix, fin du prog
  
EndIf 
;}
Je vais essayer de réaliser le réglage des niveaux maintenant :).

Encore merci LSI pour tous ces excellents codes !

Re: Effet sur des images

Publié : sam. 09/juil./2011 20:14
par Fortix
pas mal :D

Note: pitié pensez à la propreté du code svp :lol:

Re: Effet sur des images

Publié : dim. 10/juil./2011 8:38
par blendman
J'ai modifié le code pour le rendre plus lisibles (en enlevant les debug que j'avais oublié et en créant des "groupes" (enumerations, variables, etc..).

Re: Effet sur des images

Publié : dim. 10/juil./2011 15:23
par Fortix
:D

Re: Effet sur des images

Publié : lun. 11/juil./2011 11:04
par Ar-S
Merci beaucoup pour ce partage LSi, la classe.

Re: Effet sur des images

Publié : lun. 11/juil./2011 12:29
par blendman
Ar-S a écrit :Merci beaucoup pour ce partage LSi, la classe.
oui, c'est bien classe.
En plus, avec très peu de changement ces codes continuent de fonctionner 7 ans plus tard, ce qui est pas mal aussi, je trouve :D.