yop
Je suis tombé sur ce sujet concernant les effets sur les images (codes de LSI):
http://www.purebasic.fr/french/viewtopi ... 38#p133338
J'en ai profité pour adapter un des codes et faire un effet de saturation/désaturation, avec une petite trackbar

.
Merci LSI pour ses codes !
Du coup, je vais pouvoir intégrer par la suite des calques de réglages dans mon logiciel, la classe !
Il ne reste plus qu'à créer l'effet "niveau" et j'aurai tout ceux que je voulais

.
Le code pour la saturation/désaturation :
Code : Tout sélectionner
; code (effet noir et blanc) du Soldat Inconnu -2004
; adapté par blendman pour créer un effet de saturation/désaturation, avec trackbar, pour PB 4.60 (07/2011)
#img = 0
#Barre = 1
#track= 2
; 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
Global clic.b
If OpenWindow(0, 0, 0, screenX, ImageY + 60,"saturation/désaturation", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
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()
; On initialise le niveau de contraste
Niveau.f = 1
niveauplus.f = 0.1
sature = 1
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
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 2 : Debug "trackbar"
Niveau = (GetGadgetState(#track)/100)
Debug "reel :" + Str(GetGadgetState(#track))
Debug "niveau :"+StrD(niveau)
If niveau >1
niveau+niveau*0.1
sature = 1
Debug "New niveau (+):"+StrD(niveau)
ElseIf niveau<1 And niveau >=0
sature = -1
Debug "New niveau (-):"+StrD(niveau)
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 = #WM_CLOSE ; on clique sur la croix, fin du prog
EndIf
Encore merci Le Soldat Inconnu pour ses codes. Et merci à ceux qui ont posté sur ce sujet à nouveau et qui m'aident à améliorer ce logiciel (Dobro, G-rom, Denis

).