Effet sur des images
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Effet sur des images
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
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Effet de pixelisation
c'est le dernier pour l'instant mais rien ne vous empêche d'en codé d'autre
c'est le dernier pour l'instant mais rien ne vous empêche d'en codé d'autre

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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Re: Effet sur des images
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)
Je vais essayer de réaliser le réglage des niveaux maintenant
.
Encore merci LSI pour tous ces excellents codes !

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
;}

Encore merci LSI pour tous ces excellents codes !
Dernière modification par blendman le dim. 10/juil./2011 7:58, modifié 2 fois.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Effet sur des images
pas mal
Note: pitié pensez à la propreté du code svp

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

Re: Effet sur des images
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..).
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Effet sur des images
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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Effet sur des images
oui, c'est bien classe.Ar-S a écrit :Merci beaucoup pour ce partage LSi, la 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

http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english