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.