Transforme image

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Transforme image

Message par Noos88 »

Bonjour tout le monde,
je met ce code en cas si il peut apporter à servir.

Code : Tout sélectionner

Enumeration 
 #image_0 
 #image 
 #image_1
 #image_2
 #window_0 
 #image_origine 
 #button_1 
 #button_2 
 #button_3
 #button_0 
 #button_4 
 #button_5
EndEnumeration 

Global Threshold = 5
Global Progress.i = 0
Procedure.d Min(a.d,b.d)
  If a<b
    ProcedureReturn a
  Else
    ProcedureReturn b
  EndIf
EndProcedure

Procedure.d Max(a.d,b.d)
  If a>b
    ProcedureReturn a
  Else
    ProcedureReturn b
  EndIf
EndProcedure 


Structure VECTOR3
  x.f :  y.f : z.f
EndStructure

Macro SetVector3(V,_x,_y,_z)
V\x=_x
V\y=_y
V\z=_z
EndMacro

Macro VectorLength(V)
(V\x*V\x + V\y*V\y + V\z*V\z)
EndMacro

Macro Normalize(V)
         l.f = VectorLength(V)
         If (l <> 0)
           l =  Sqr(l)
           V\x / l
           V\y / l
           V\z / l
         EndIf
EndMacro

Procedure.f DotProduct(*A.VECTOR3,*B.VECTOR3)
ProcedureReturn *A\X * *B\X + *A\Y * *B\Y + *A\Z * *B\Z
EndProcedure

Macro CharToByte(Char)
Char/255.0
EndMacro

Macro ByteToChar(Byte)
Byte*255
EndMacro

Procedure GetGrayLevel(x,y)
  
  Color = Point(x,y)
  Red     = Red(Color)
  Green = Green(Color)
  Blue    = Blue(Color)
  Gray = (Red+Green+Blue)/3
  ProcedureReturn Gray
EndProcedure

Procedure Map0_to_255(*V.VECTOR3)
*V\x = max(-256,*V\x)
*V\y = max(-256,*V\y)
*V\z = max(-256,*V\z)
*V\x = min(256,*V\x)
*V\y = min(256,*V\y)
*V\z = min(256,*V\z)
*V\x =*V\x/2 + 127
*V\y =*V\y/2 + 127 
*V\z =*V\z/2 + 127
EndProcedure

Procedure Conv3x3(ImageID, Array Gradient.f(2) , Array Sobel(2))
StartDrawing(ImageOutput(ImageID))
For y = 1 To ImageHeight(ImageID)-2
   For x = 1 To ImageWidth(ImageID)-2
   
   Gradient(x,y) = (CharToByte(GetGrayLevel(x-1,y-1))*Sobel(0,0))+(CharToByte(GetGrayLevel(x,y-1))*Sobel(1,0))+(CharToByte(GetGrayLevel(x+1,y-1))*Sobel(2,0))+(CharToByte(GetGrayLevel(x-1,y))*Sobel(0,1))+(CharToByte(GetGrayLevel(x,y-1))*Sobel(1,1))+(CharToByte(GetGrayLevel(x+1,y))*Sobel(2,1))+(CharToByte(GetGrayLevel(x-1,y+1))*Sobel(0,2))+(CharToByte(GetGrayLevel(x,y+1))*Sobel(1,2))+(CharToByte(GetGrayLevel(x+1,y+1))*Sobel(2,2))                                               
   Gradient(x,y) * Threshold
   
   ;SetGadgetState(0,Progress) : SmartWindowRefresh(0,1)
  ; Progress + 1
   Next
Next    
StopDrawing()
EndProcedure

Global  Dim SobelX(2,2)  : 
SobelX(0,0)=-1 : SobelX(1,0)=-2 : SobelX(2,0)=-1
SobelX(0,1)=0  : SobelX(1,1)=0  : SobelX(2,1)=0
SobelX(0,2)=1  : SobelX(1,2)=2  : SobelX(2,2)=1

Global  Dim SobelY(2,2)  : 
SobelY(0,0)=-1 : SobelY(1,0)=0 : SobelY(2,0)=1
SobelY(0,1)=-2 : SobelY(1,1)=0 : SobelY(2,1)=2
SobelY(0,2)=-1 : SobelY(1,2)=0 : SobelY(2,2)=1


UsePNGImageDecoder()
UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
UsePNGImageEncoder()
UseJPEG2000ImageEncoder()
UseJPEGImageEncoder()
UsePNGImageEncoder() 

Procedure CouleurGris(x,y)
  
    Color = Point(x,y) 
    Red     = Red(Color) 
    Green = Green(Color) 
    Blue    = Blue(Color) 
    Gray = (Red+Green+Blue)/3
    
    ProcedureReturn Gray  
  
  EndProcedure

Procedure ConvertirSepia(ImageID) 
StartDrawing(ImageOutput(ImageID)) 
For y = 0 To ImageHeight(ImageID)-1 
   For x = 0 To ImageWidth(ImageID)-1 
    Gray=CouleurGris(x,y)
    Plot(x,y,RGB((gray+112)/2,(gray+44)/2,(gray+20)/2)); (112, 44, 20)
   Next 
Next    
StopDrawing() 
EndProcedure 

Procedure ConvertirGris(ImageID) 
StartDrawing(ImageOutput(ImageID)) 
For y = 0 To ImageHeight(ImageID)-1 
   For x = 0 To ImageWidth(ImageID)-1 
    Gray=CouleurGris(x,y)
    Plot(x,y,RGB(gray,gray,gray))    
   Next 
Next    
StopDrawing() 
EndProcedure 

Procedure ConvertirProfondeur(ImageID)
  
Global Dim GradientX.f(ImageWidth(ImageID),ImageHeight(ImageID))
Global Dim GradientY.f(ImageWidth(ImageID),ImageHeight(ImageID))

Conv3x3(ImageID, gradientX(), sobelX() );
Conv3x3(ImageID, gradientY(), sobelY() );



StartDrawing(ImageOutput(ImageID))
For y = 0 To ImageHeight(ImageID)-1
   For x = 0 To ImageWidth(ImageID)-1
  
  V.VECTOR3
  SetVector3(V,GradientX(x,y),GradientY(x,y),1)
  Normalize(V)
  
  Color.VECTOR3
  SetVector3(Color,ByteToChar(V\x),ByteToChar(V\y),ByteToChar(V\z))
  Map0_to_255(Color)
  Plot(x,y,RGB(Color\x,Color\y,Color\z)) 

   Next
Next    
StopDrawing()
  
  
 EndProcedure
 
 Filtre$ = "Images|*.bmp;*.jpg;*.png;*.tga;*.tif"
 
If OpenWindow(#Window_0, 0, 0, 800, 700, "",#PB_Window_ScreenCentered| #PB_Window_TitleBar ) 
  CreateImage(#image_0,800,600)
  
  ImageGadget(#image_1, 0, 0, 800,600, ImageID(#image_0)) 
  
  ButtonGadget(#button_0,10,600,150,30,"Ouvrir image")
  ButtonGadget(#button_1,400,600,150,30,"Sepia piere") 
  ButtonGadget(#button_3,400,650,150,30,"Gris dessin")
  ButtonGadget(#button_4,200,600,150,30,"Sepia") 
  ButtonGadget(#button_5,200,650,150,30,"Gris")
  
 ButtonGadget(#button_2,600,650,40,30,"Fermer") 
  
Repeat  
  Event = WaitWindowEvent() 
   If Event = #PB_Event_Gadget 
    
   If EventGadget()=#button_2 
    End 
   EndIf 
   
    If EventGadget()=#button_0 
     fichier$=OpenFileRequester("Ouvrir image","",Filtre$,0) 
     If fichier$
       LoadImage(#image_origine,fichier$) 
       ResizeImage(#image_origine,800,600)
       SetGadgetState(#image_1,ImageID(#image_origine))
       EndIf
   EndIf
   
   If EventGadget()=#button_1 
     CopyImage(#image_origine,#image)     
     ConvertirProfondeur(#image)     
     ConvertirSepia(#image)  
     SetGadgetState(#image_1,ImageID(#image)) 
   EndIf 
   
   If EventGadget()=#button_3
     CopyImage(#image_origine,#image) 
     ConvertirProfondeur(#image)
    ConvertirGris(#image)  
    SetGadgetState(#image_1,ImageID(#image))
   EndIf 
   
   If EventGadget()=#button_4
    CopyImage(#image_origine,#image)      
    ConvertirSepia(#image)   
    SetGadgetState(#image_1,ImageID(#image))
  EndIf
  
   If EventGadget()=#button_5
    CopyImage(#image_origine,#image)   
    ConvertirGris(#image)   
    SetGadgetState(#image_1,ImageID(#image))
   EndIf
    
  EndIf 
 
   ForEver 
    
EndIf 
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Transforme image

Message par G-Rom »

Tu aurais pu cité la source du 3/4 de ton code...
du plagiat quoi...

http://www.purebasic.fr/french/viewtopi ... bel#p91072

Anonyme , c'est moi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Transforme image

Message par Backup »

:lol: :lol:

Anonyme ça peut aussi etre moi !! ;)
(dans les anciens posts.. )
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Re: Transforme image

Message par Noos88 »

Je n'ai jamais dit que c'était moi qui avais tout fait, je partage ce code car ca fait juste un belle effet.
Mais merci quand meme je ne savais plus ou j'avais trouvé ce code.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Transforme image

Message par G-Rom »

Dobro a écrit ::lol: :lol:

Anonyme ça peut aussi etre moi !! ;)
(dans les anciens posts.. )
Oui , sauf que je reconnais une partie de mon code. ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Transforme image

Message par Backup »

G-Rom a écrit :
Dobro a écrit ::lol: :lol:

Anonyme ça peut aussi etre moi !! ;)
(dans les anciens posts.. )
Oui , sauf que je reconnais une partie de mon code. ;)
oui, j'ai pas dis que le code etait de moi

dans un premier temps ta reponse m'a fait marrer ... d'ou les smiley
puis
j'ai apporté une info supplémentaire a propos de Anonyme :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Transforme image

Message par G-Rom »

Je n'ai jamais dit que c'était moi qui avais tout fait,
Heureusement , mais tu aurais pu le préciser , c'est pas le genre de chose que j'apprécie, même si ce n'est que tu codes fait pour être partagé , un lien , un pseudo , ou un "je ne me rappelle plus qui à fait ca" , passe mieux que rien du tout, & surtout que si je te demande que veut dire Conv3x3() tu vas répondre à coté de la plaque à tout les coups & tu vas passé pour un ... :wink:
oui, j'ai pas dis que le code etait de moi
oui , j'ai pas dit que tu as dit que c'était toi ou moi , bref , je me perd dans cette phrase, tu m'a compris... :mrgreen:
c'est quand j'ai aperçu cette variable "Global Threshold = 5" , je me suis dit , celle la , elle est copyrigthé by bibi , j'ai descendu le listing , et bingo , mon code!
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Re: Transforme image

Message par Noos88 »

Je suis désolé, mais je ne voulais en aucun cas que vous pensé ca, mais pour l'explication , il es vrais que tout les code que je trouve sympa comme celui de anonyme je les sauvegardes dans un dossier et quand il peux me servir je les ressorts.

il aurait surement été mieux mis dans :
http://www.purebasic.fr/french/viewtopi ... bel#p91072

mais comme je vous ai dit, je sauvegarde les code sans savoir ou je les ai récupérer
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transforme image

Message par falsam »

@Noos88 : Je pense que l'incident, si incident il y a, est clos. Quand tu utilises en grande partie un code dont tu n'es pas le owner, indique l'origine de la source si tu as ou signale que tu as picoré des portions de code.

P.S. : Je me demande qui n'a jamais rédiger des dissertations en piquant des portions entières de texte sur internet ?:p
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Transforme image

Message par Ar-S »

falsam a écrit :@Noos88 : Je pense que l'incident, si incident il y a, est clos. Quand tu utilises en grande partie un code dont tu n'es pas le owner, indique l'origine de la source si tu as ou signale que tu as picoré des portions de code.
P.S. : Je me demande qui n'a jamais rédiger des dissertations en piquant des portions entières de texte sur internet ?:p
Moi, internet c'était au cybercafé à l'époque :) et c'était cher. :mrgreen:
~~~~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
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Transforme image

Message par Kwai chang caine »

Je me demande qui n'a jamais rédiger des dissertations en piquant des portions entières de texte sur internet ?
Baaaahhh moi....j'ai un alibi indestructible....INTERNET n'existait pas :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transforme image

Message par falsam »

Kwai chang caine a écrit :Baaaahhh moi....j'ai un alibi indestructible....INTERNET n'existait pas :mrgreen:
Des portions de livres dans ce cas :ppp
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Transforme image

Message par Ar-S »

Non plus :) déjà qu'une dissert c'était chiant, si en plus fallait lire.. :D
~~~~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
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Transforme image

Message par Cool Dji »

En 3°, j'avais repris une phrase de Jules Verne (l'ile mystérieuse), je m'en rappelle comme si 'était hier (il y a 25 ans) : "quoique forts grossiers, ces moyeux s'avérèrent par la suite d'une solidité remarquable". Le prof avait même lu cette phrase en cours tellement c'était beau. J'ai eu honte de moi et pas eu le courage de dire que c'était du plagiat. Plus jamais retenté :mrgreen:
Only PureBasic makes it possible
Répondre