Ar-S, tu as parfaitement raison quoi que...
En faite tu as raison et je suis bien d'accord avec toi.
C'est comme si tu stockais les pixel dans un txt et que tu le compressais, forcement un fichier txt sera plus léger. Encore plus si tu divises les valeurs des couleurs par 2. (et que tu les remultiplies par 2 pour le décodage)
C'est exactement se que je fais 
 
Tu as tous compris !
Mais se qui fais aussi prendre moins de place à l'image et au fichier texte, c'est si tu met toutes les valeurs en Pair !
Mais l'unique chose qui fait gagner qques ko à ton image, c'est qu'il y a plus de noir dedans.
Bien, bien, je suis aussi d'acord avec toi ici et je vais te faire voir un de mes code qui fonctionne très bien.
Je remplace toutes les couleurs RGB(0, 0, 0) par RGB(1, 1, 1) ou RGBA(0, 0, 0, 0) par du RGBA(1, 1, 1, 1)
Ensuite je regarde la couleur du pixel, je la compare à la couleur sauvegardé (Au début ya rien c'est normale)
Si la couleur actuellement lut n'as pas été enregistré (N'est pas connue), je l'enregistre dans une variable.
Si la couleur actuellement lut a été enregistré (Connue), je remplace le pixel lut par RGB(0, 0, 0) ou RGBA(0, 0, 0, 0).
De cette façon, seul le premier pixel de couleur est, le reste qui suis est noir pour dire que le pixel se répète tans que ya du RGB(0, 0, 0) ou RGBA(0, 0, 0, 0).
De cette façon, ont gagne en place !
Ce code fais cela, il te créer aussi l'image de sortie en PNG pour que tu puisse voir à quoi ça ressemble.
Il te créer un fichier TXT ou sont toutes les couleurs de l'image modifiés.
Code : Tout sélectionner
; Code créer par monsieur Dieppedalle David le 02/03/2016.
; Ce code remplace tous les pixels noir (0) de l'image, par du noir (1) puis remplace tous les pixels
; voisin de la même Couleur.q par du noir (0) (Sauf le premier), jusqu'à se qu'une autre Couleur.q soit trouvé.
; Ex: RGB(125, 147, 25), RGB(125, 147, 25), RGB(125, 147, 25) deviendra: RGB(125, 147, 25), RGB(0, 0, 0), RGB(0, 0, 0).
; Ex: RGB(59, 198, 65, 255), RGB(59, 198, 65, 255), RGB(59, 198, 65, 255) deviendra: RGB(59, 198, 65, 255), RGB(0, 0, 0, 0), RGB(0, 0, 0, 0).
Global NomFichierImage$
; Procedure de chargement d'une image
Procedure.l ChargementImage(NumeroImage.i, FiltreDefaut.i)
  
  Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpeg (*.Jpg)|*.Jpg|Image Tga (*.Tga)|*.Tga|Image Tiff (*.Tiff)|*.Tiff"
  FichierImage$ = OpenFileRequester("Choisissez un fichier image à charger...", GetHomeDirectory() + "Bureau\", Filtre$, FiltreDefaut.i)
  NomFichierImage$ = GetFilePart(FichierImage$, #PB_FileSystem_NoExtension)
  
  If FichierImage$
    
    Select LCase(GetExtensionPart(FichierImage$))
        
      Case  "bmp"
        ; Ok
        
      Case "png"
        UsePNGImageDecoder()
        
      Case "jpeg","jpg"
        UseJPEGImageDecoder()
        
      Case  "tga"
        UseTGAImageDecoder()
        
      Case "tiff"
        UseTIFFImageDecoder()
        
      Default
        MessageRequester("Fichier invalide !", "      Veuillez choisir un fichier d'image valide !", 48)
        
        ProcedureReturn 0
        
    EndSelect
    
    If LoadImage(NumeroImage.i, FichierImage$) <> 0
      ProcedureReturn LoadImage(NumeroImage.i, FichierImage$)
    Else
      MessageRequester("Erreur de chargement !", "      Impossible de charger le fichier " + Chr(34) + GetFilePart(FichierImage$) + Chr(34) + " !", 16)
      ProcedureReturn 0
    EndIf
    
  EndIf
  
  ProcedureReturn 0
EndProcedure
#ImageSource = 1
#ImageCible = 2
NumeroImageSource.i = ChargementImage(#ImageSource, 1)
OpenFile(0, NomFichierImage$ + "Sortie V1.txt")
If NumeroImageSource.i 
  
  If IsImage(#ImageSource)
    
    LargeurImage.i = ImageWidth(#ImageSource)
    HauteurImage.i = ImageHeight(#ImageSource)
    ProfondeurImage.i = ImageDepth(#ImageSource)
    
    If ProfondeurImage.i < 32
      NumeroImageCible = CreateImage(#ImageCible, LargeurImage.i, HauteurImage.i, ProfondeurImage.i)
      
    ElseIf ProfondeurImage.i = 32
      NumeroImageCible = CreateImage(#ImageCible, LargeurImage.i, HauteurImage.i, ProfondeurImage.i, #PB_Image_Transparent)
      
    EndIf
    
    If Not NumeroImageCible And Not IsImage(#ImageCible)
      MessageRequester("Erreur", "Image Cible non initialisé !", 64)
      End
    EndIf
    
    If ProfondeurImage.i < 32
      Dim TableauValeurImage.i(((LargeurImage.i) * (HauteurImage.i) * 3) - 1) ; -1 Car le tableau commence à 0
    ElseIf ProfondeurImage.i = 32
      Dim TableauValeurImage.i(((LargeurImage.i) * (HauteurImage.i) * 4) - 1) ; -1 Car le tableau commence à 0
    EndIf
    
    WriteUnicodeCharacter(0, LargeurImage.i)
    WriteUnicodeCharacter(0, HauteurImage.i)
    WriteAsciiCharacter(0, ProfondeurImage.i)
    
    IndexTableau.q = 0
    
    StartDrawing(ImageOutput(#ImageSource))
    
    If ProfondeurImage.i < 32
      
      For Y.i = 0 To HauteurImage.i - 1
        
        For X.i = 0 To LargeurImage.i - 1
          
          Couleur.q = Point(X.i, Y.i)
          
          Rouge.i = Red(Couleur.q)
          Vert.i = Green(Couleur.q)
          Bleu.i = Blue(Couleur.q)
          
          If Rouge.i = 0
            Rouge.i = 1
          EndIf
          
          If Vert.i = 0
            Vert.i = 1
          EndIf
          
          If Bleu.i = 0
            Bleu.i = 1
          EndIf
          
          If SauvegardeCouleur.q = Couleur.q
            Rouge.i = 0
            Vert.i = 0
            Bleu.i = 0
            
          ElseIf SauvegardeCouleur.q <> Couleur.q
            SauvegardeCouleur.q = Couleur.q
            
          EndIf
          
          WriteAsciiCharacter(0, Rouge.i)
          WriteAsciiCharacter(0, Vert.i)
          WriteAsciiCharacter(0, Bleu.i)
          
          TableauValeurImage.i(IndexTableau.q) = Rouge.i
          IndexTableau.q + 1
          
          TableauValeurImage.i(IndexTableau.q) = Vert.i
          IndexTableau.q + 1
          
          TableauValeurImage.i(IndexTableau.q) = Bleu.i
          IndexTableau.q + 1
          
        Next
        
      Next
      
    ElseIf ProfondeurImage.i = 32
      
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      
      IndexTableau.q = 0
      
      For Y.i = 0 To HauteurImage.i - 1
        
        For X.i = 0 To LargeurImage.i - 1
          
          Couleur.q = Point(X.i, Y.i)
          
          Rouge.i = Red(Couleur.q)
          Vert.i = Green(Couleur.q)
          Bleu.i = Blue(Couleur.q)
          Alpha.i = Alpha(Couleur.q)
          
          If Rouge.i = 0
            Rouge.i = 1
          EndIf
          
          If Vert.i = 0
            Vert.i = 1
          EndIf
          
          If Bleu.i = 0
            Bleu.i = 1
          EndIf
          
          If Alpha.i = 0
            Alpha.i = 1
          EndIf
          
          If SauvegardeCouleur.q = Couleur.q
            Rouge.i = 0
            Vert.i = 0
            Bleu.i = 0
            Alpha.i = 0
            
          Else
            SauvegardeCouleur.q = Couleur.q
            
          EndIf
          
          WriteAsciiCharacter(0, Rouge.i)
          WriteAsciiCharacter(0, Vert.i)
          WriteAsciiCharacter(0, Bleu.i)
          WriteAsciiCharacter(0, Alpha.i)
          
          TableauValeurImage.i(IndexTableau.q) = Rouge.i
          IndexTableau.q + 1
          
          TableauValeurImage.i(IndexTableau.q) = Vert.i
          IndexTableau.q + 1
          
          TableauValeurImage.i(IndexTableau.q) = Bleu.i
          IndexTableau.q + 1
          
          TableauValeurImage.i(IndexTableau.q) = Alpha.i
          IndexTableau.q + 1
          
        Next
        
      Next
      
    EndIf
    
    StopDrawing()
    
    StartDrawing(ImageOutput(#ImageCible))
    
    If ProfondeurImage.i < 32
      
      X.i = 0
      Y.i = 0
      
      For IndexTableau.q = 0 To (((LargeurImage.i) * (HauteurImage.i)) * 3) - 1
        
        Plot(X.i, Y.i, RGB(TableauValeurImage(IndexTableau.q), TableauValeurImage(IndexTableau.q + 1), TableauValeurImage(IndexTableau.q + 2)))
        IndexTableau.q + 2
        
        If X.i < LargeurImage.i - 1
          X.i + 1
          
        ElseIf X.i = LargeurImage.i - 1
          X.i = 0
          Y.i + 1
          
        EndIf
        
      Next
      
    ElseIf ProfondeurImage.i = 32
      
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      
      X.i = 0
      Y.i = 0
      
      For IndexTableau.q = 0 To (((LargeurImage.i) * (HauteurImage.i)) * 4) - 1
        
        Plot(X.i, Y.i, RGBA(TableauValeurImage(IndexTableau.q), TableauValeurImage(IndexTableau.q + 1), TableauValeurImage(IndexTableau.q + 2), TableauValeurImage(IndexTableau.q + 3)))
        IndexTableau.q + 3
        
        If X.i < LargeurImage.i - 1
          X.i + 1
          
        ElseIf X.i = LargeurImage.i - 1
          X.i = 0
          Y.i + 1
          
        EndIf
        
      Next
      
    EndIf
    
    StopDrawing()
    
    If IsImage(#ImageCible)
      
      UsePNGImageEncoder()
      SaveImage(#ImageCible, NomFichierImage$ + " Sortie V1.png", #PB_ImagePlugin_PNG, -1, ProfondeurImage.i)
      
    EndIf
    
  Else
    MessageRequester("Erreur", "Image Source non initialisé !", 64)
    
  EndIf
  
Else
  
EndIf
CloseFile(0)
Maintenant voici pour le décodage du fichier Texte:
Code : Tout sélectionner
; Code créer par monsieur Dieppedalle David le 02/03/2016.
; Ce code remplace tous les pixels noir (0) de l'image, par la couleur du premier pixel de couleur.
; Ex: RGB(125, 147, 25), RGB(0, 0, 0), RGB(0, 0, 0) deviendra: RGB(125, 147, 25), RGB(125, 147, 25), RGB(125, 147, 25).
; Ex: RGB(59, 198, 65, 255), RGB(0, 0, 0, 0), RGB(0, 0, 0, 0) deviendra: RGB(59, 198, 65, 255), RGB(59, 198, 65, 255), RGB(59, 198, 65, 255).
; Ensuite une fois ça fait, remplace toutes les valeur (1) par (0).
; Ex: RGB(125, 1, 25), deviendra: RGB(125, 0, 25).
; Ex: RGB(1, 198, 1, 255), deviendra: RGB(0, 198, 0, 255).
SelectionFichier$ = OpenFileRequester("Choisissez le fichier texte de l'image à charger...", GetHomeDirectory() + "\Bureau\", "Fichier (*.txt)|*.txt", 0)
NomFichier$ = GetFilePart(SelectionFichier$, #PB_FileSystem_NoExtension)
If SelectionFichier$
  
  If ReadFile(0, SelectionFichier$) 
    
    LongeurFichier.q = Lof(0)
    
    ; Extraction de la Largeur de l'image
    LargeurImage.i = ReadUnicodeCharacter(0)
    
    ; Extraction de la Hauteur de l'image
    HauteurImage.i = ReadUnicodeCharacter(0)
    
    ; Extraction de la Profondeur de l'image
    ProfondeurImage.i = ReadAsciiCharacter(0)
    
    If ProfondeurImage.i < 32
      
      If CreateImage(1, LargeurImage.i, HauteurImage.i, ProfondeurImage.i)
        StartDrawing(ImageOutput(1))
        
        X.i = 0
        Y.i = 0
        
        While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
          
          ; Lecture de des valeurs RGB dans le fichier texte
          Rouge.i = ReadAsciiCharacter(0)
          Vert.i = ReadAsciiCharacter(0)
          Bleu.i = ReadAsciiCharacter(0)
          
          If (Rouge.i > 0 Or Vert.i > 0 Or Bleu.i > 0) ; Si la Couleur n'est pas égale à 0, ont sauvegarde la Couleur.q
            SauvegardeCouleur.q = RGB(Rouge.i, Vert.i, Bleu.i)
            
          ElseIf (Rouge.i = 0 And Vert.i = 0 And Bleu.i = 0) ; Sinon Si la Couleur est égale à 0, c'est qu'il faut remplacer la Couleur (0) par celle sauvegardé précédément
            
            Rouge.i = Red(SauvegardeCouleur.q)
            Vert.i = Green(SauvegardeCouleur.q)
            Bleu.i = Blue(SauvegardeCouleur.q)
            
          EndIf
          
          ; Ici ont va pour que ça prenne moins de place remplacer toutes les valeur 1 par 0.
          If Rouge.i = 1
            Rouge.i= 0
          EndIf
          
          If Vert.i = 1
            Vert.i= 0
          EndIf
          
          If Bleu.i = 1
            Bleu.i= 0
          EndIf
          
          Plot(X.i, Y.i, RGB(Rouge.i, Vert.i, Bleu.i))
          
          If X.i < LargeurImage.i - 1
            X.i + 1
          Else
            X.i = 0
            Y.i + 1
          EndIf
          
        Wend
        
        StopDrawing()
        
        UsePNGImageEncoder()
        SaveImage(1, NomFichier$ + " Reconstitué.png", #PB_ImagePlugin_PNG, -1, ProfondeurImage.i)
        
      Else
        MessageRequester("Erreur création image...", "    Impossible de créer le fichier image !", 48)
        End
      EndIf
      
    ElseIf ProfondeurImage.i = 32
      
      If CreateImage(1, LargeurImage.i, HauteurImage.i, ProfondeurImage.i, #PB_Image_Transparent)
        StartDrawing(ImageOutput(1))
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        
        X.i = 0
        Y.i = 0
        
        While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
          
          ; Lecture de des valeurs RGB dans le fichier texte
          Rouge.i = ReadAsciiCharacter(0)
          Vert.i = ReadAsciiCharacter(0)
          Bleu.i = ReadAsciiCharacter(0)
          Alpha.i = ReadAsciiCharacter(0)
          
          If (Rouge.i > 0 Or Vert.i > 0 Or Bleu.i > 0 Or Alpha.i > 0) ; Si la Couleur n'est pas égale à 0, ont sauvegarde la Couleur.q
            SauvegardeCouleur.q = RGBA(Rouge.i, Vert.i, Bleu.i, Alpha.i)
            
          ElseIf (Rouge.i = 0 And Vert.i = 0 And Bleu.i = 0 And Alpha.i = 0) ; Sinon Si la Couleur est égale à 0, c'est qu'il faut remplacer la Couleur (0) par celle sauvegardé précédément
            
            Rouge.i = Red(SauvegardeCouleur.q)
            Vert.i = Green(SauvegardeCouleur.q)
            Bleu.i = Blue(SauvegardeCouleur.q)
            Alpha.i = Alpha(SauvegardeCouleur.q)
            
          EndIf
          
          ; Ici ont va pour que ça prenne moins de place remplacer toutes les valeur 1 par 0.
          If Rouge.i = 1
            Rouge.i= 0
          EndIf
          
          If Vert.i = 1
            Vert.i= 0
          EndIf
          
          If Bleu.i = 1
            Bleu.i= 0
          EndIf
          
          If Alpha.i = 1
            Alpha.i= 0
          EndIf
          
          Plot(X.i, Y.i, RGBA(Rouge.i, Vert.i, Bleu.i, Alpha.i))
          
          If X.i < LargeurImage.i - 1
            X.i + 1
          Else
            X.i = 0
            Y.i + 1
          EndIf
          
        Wend
        
        StopDrawing()
        
        UsePNGImageEncoder()
        SaveImage(1, NomFichier$ + " Reconstitué.png", #PB_ImagePlugin_PNG, -1, ProfondeurImage.i)
        
      Else
        MessageRequester("Erreur création image...", "    Impossible de créer le fichier image !", 48)
        End
      EndIf
      
    EndIf
    
    CloseFile(0)               ; Ferme le fichier précédemment ouvert
    
  Else
    MessageRequester("Erreur d'ouvertur de fichier...", "    Le fichier ne peut pas être ouvert !", 48)
    End
    
  EndIf
  
EndIf
 
			
			
									
									Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran:  Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.