Inversé les couleurs d'une image

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Inversé les couleurs d'une image

Message par venom »

Bonjour,

voilà ce code vous permet d'inverser la couleur des pixels d'une image.
Si jamais ça peu servir a quel qu'un le voici :wink: :

Code : Tout sélectionner

Structure img
  x.l
  y.l
  color.l
EndStructure

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

file$ = OpenFileRequester("fichier image", "", "image compatible|*.bmp;*.jpg;*.png;*.tga;*.tif", 0) ; <---- ont choisit une image bitmap
If LoadImage(1, file$) ; <--- ont charge l'image du dessus
  If StartDrawing(ImageOutput(1))
      width = ImageWidth(1) ; <--- ont prend la largeur de l'image
      height = ImageHeight(1) ; <--- ont prend la hauteur de l'image
      size = width * height ; <--- ont multiplie la largeur par la hauteur pour savoir le nombre de pixels au total
      Dim Array.img(size)
      
      ; <------------------------- ont récupère la  couleur de chaque pixel -----------------------
      i = 0
      For y = 0 To height - 1
        For x = 0 To width - 1
          color = Point(x, y)
          Array(i)\x = x
          Array(i)\y = y
          Array(i)\color = color
          i + 1
        Next
      Next
      ; <------------------------------------------------------------------------------------------
    StopDrawing()
  EndIf
EndIf

If OpenWindow(0, 0, 0, ImageWidth(1), ImageHeight(1), "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) ; <------------------------- ont ouvre une fenêtre a la taille de l'image
  If CreateImage(0, ImageWidth(1), ImageHeight(1)) ; <------------------------- ont charge l'environnement image
    If StartDrawing(ImageOutput(0))
        
        For i = 0 To size - 1
          i = 0
          For y = 0 To height - 1
            For x = 0 To width - 1
              i + 1
              Plot(Array(i)\x = x, Array(i)\y = y, RGB(255-Red(Array(i)\color), 255-Green(Array(i)\color), 255-Blue(Array(i)\color))) ; <----- ici ont redessine pixel par pixel sur le Drawing() couleur inversé
            Next
          Next
        Next

      StopDrawing()
    EndIf
  EndIf
  
  ImageGadget(0, 0, 0, 0, 0, ImageID(0))
  
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow
EndIf
; <------------------------- et ont quitte






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Inversé les couleurs d'une image

Message par Geo Trouvpatou »

Salut.

Pour "Dim Array.img(size)" à la ligne 16, il faudrait peut-être mieux utiliser une variable autre que Array qui est un mot clé réservé à PB lorsque l'on veut passer un tableau en paramètre dans une procédure.

Cela peut peut-être poser problème (A confirmer par d'autres).

Bye.
Répondre