Effet sur des images

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Effet sur des images

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Effet sur des images

Message 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 !
Dernière modification par blendman le dim. 10/juil./2011 7:58, modifié 2 fois.
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Effet sur des images

Message par Fortix »

pas mal :D

Note: pitié pensez à la propreté du code svp :lol:
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Effet sur des images

Message 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..).
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Re: Effet sur des images

Message par Fortix »

:D
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Effet sur des images

Message par Ar-S »

Merci beaucoup pour ce partage LSi, la classe.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Effet sur des images

Message 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.
Répondre