[LOCKED] Re, un problème avec un code

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Brayan
Messages : 19
Inscription : mar. 24/juil./2012 23:06

[LOCKED] Re, un problème avec un code

Message par Brayan »

Dayvid, les heures sont comptées pour le pseudo Brayan :x

Quoiqu'il en soit, je locke une fois de plus :?
Bonsoir,

Je me permets de poster parce que je ne parviens pas à comprendre quelque chose !
Voilà, en bref, se code permet pour commencer car ce n’est qu’une ébauche, de savoir le nombre de couleurs dans l’image et leurs fréquence d’utilisation, voilà en gros.

Pardonnez-moi pour se long code:

Code : Tout sélectionner

Enumeration 1
  #Image
EndEnumeration

PixelMax.q = 16777216

Global FichierImage$ = ""

Global NewMap PaletteCouleur.q(PixelMax.q)
Global NewList PaletteCouleurTrier.q()
Global NewList CouleurPixelImage.q()
Global NewList CouleurPaletteCompresser.q()
Global Dim CouleursResensement.q(1, 0)

; Procedure de chargement d'une image
Procedure.q ChargementImage(NumeroImage, FiltreDefaut)
  
  Chargement_Image:
  Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpeg (*.Jpeg)|*.Jpeg"
  FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, FiltreDefaut)
  
  If FichierImage$
    
    If FindString(LCase(GetFilePart(FichierImage$)), ".bmp", 1)
      ; Ok
      
    ElseIf FindString(LCase(GetFilePart(FichierImage$)), ".png", 1)
      UsePNGImageDecoder()
      
    ElseIf FindString(LCase(GetFilePart(FichierImage$)), ".jpeg", 1)
      UseJPEGImageDecoder()
      
    Else
      MessageRequester("Fichier invalide !", "      Veuillez choisir un fichier d'image invalide !", 48)
      ProcedureReturn 0
    EndIf
    
    If LoadImage(NumeroImage, FichierImage$) <> 0
      ProcedureReturn LoadImage(NumeroImage, 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

; Procédure permetant de savoir la place qu'utilise le nombre en octets
; Ascii = 1 octets, Unicode = 2 octets, Long = 4 octets, Quad = 8 octets
Procedure.b TypeNombre(Nombre.q)
  
  If Nombre = 0 Or Nombre <= 255
    ProcedureReturn 1
    
  ElseIf Nombre => 256 And Nombre <= 65535
    ProcedureReturn 2
    
  ElseIf Nombre => 65536 And Nombre <= 2147483647
    ProcedureReturn 4
    
  ElseIf Nombre => 2147483648 And Nombre <= 9223372036854775807
    ProcedureReturn 8
    
  EndIf
  
EndProcedure

; Procedure pour indexer les couleurs pour crée une palette de couleurs
Procedure IndexationPixel(Couleur)
  PaletteCouleur.q(Str(Couleur)) = Couleur
EndProcedure

; Procedure pour trier la palette de couleurs indexer précédement
Procedure.q TrierPaletteCouleurs()
  NombreCouleurs = 0
  ResetMap(PaletteCouleur.q())
  While NextMapElement(PaletteCouleur.q())
    NombreCouleurs + 1
    AddElement(PaletteCouleurTrier.q())
    PaletteCouleurTrier.q() = PaletteCouleur.q()
  Wend
  SortList(PaletteCouleurTrier.q(), #PB_Sort_Ascending)
  ProcedureReturn NombreCouleurs
EndProcedure

; Procedure pour enregistrer la couleur du pixel lue actuellement
Procedure EnregistrerPixel(Couleur)
  AddElement(CouleurPixelImage.q())
  CouleurPixelImage.q() = Couleur
EndProcedure

; Procedure pour réduire les informations de la palette de couleur en calculent la différence qu'il y a entre les nombres dans l'ordre du plus petit au plus grand
; (entre le premier et le deuxième, le deuxième et le troisième, le troisième et le quatrième et ainsi de suite !)
Procedure CreationPaletteCompresser()
  
  ForEach PaletteCouleurTrier.q()
    
    If ListIndex(PaletteCouleurTrier.q()) = 0
      AddElement(CouleurPaletteCompresser.q())
      CouleurPaletteCompresser.q() = PaletteCouleurTrier.q()
    EndIf
    
    PremierNombre.q = PaletteCouleurTrier.q()
    
    If NextElement(PaletteCouleurTrier.q())
      SecondNombre.q = PaletteCouleurTrier.q()
      AddElement(CouleurPaletteCompresser.q())
      CouleurPaletteCompresser.q() = SecondNombre.q - PremierNombre.q
      PreviousElement(PaletteCouleurTrier.q())
    Else
      Break
    EndIf
    
  Next PaletteCouleurTrier.q()
  
EndProcedure

; Procedure d'oppération sur le pixel lue actuellement
Procedure OpperationPixel(Couleur)
  
  Static NombreLigne
  Static Modification
  
  For i = 0 To NombreLigne
    
    If CouleursResensement.q(0, i) = Couleur
      CouleurTableau.q = CouleursResensement.q(0, i)
      NombreCouleurTableau.q = CouleursResensement.q(1, i)
      CouleursResensement.q(1, i) = NombreCouleurTableau.q + 1
      Trouver = 1
      Break
      
    Else
      Trouver = 0
    EndIf
    
  Next
  
  If NombreLigne > 0
    
    If Modification = 0
      If Trouver = 0
        NombreLigne + 1
        ReDim CouleursResensement.q(1, NombreLigne)
        CouleursResensement.q(0, NombreLigne) = Couleur
        CouleursResensement.q(1, NombreLigne) = 1
      EndIf
      
    Else
      CouleursResensement.q(0, NombreLigne) = Couleur
      CouleursResensement.q(1, NombreLigne) = 1
      Modification = 0
    EndIf
    
  Else
    
    NombreLigne + 1
    Modification = 1
    CouleursResensement.q(0, 0) = Couleur
    CouleursResensement.q(1, 0) = 1
    ReDim CouleursResensement.q(1, NombreLigne)
    
  EndIf
  
EndProcedure

; Procedure qui permet de savoir combien de fois au totale chaque couleur a été utiliser dans l'image
Procedure ResensementCouleurs()
  
  NombreLigne = ArraySize(CouleursResensement(), 2)
  
  For i = 0 To NombreLigne
    CouleurTableau = CouleursResensement(0, i)
    NombreCouleurTableau = CouleursResensement(1, i)
    Rouge = Red(CouleurTableau)
    Vert = Green(CouleurTableau)
    Bleu = Blue(CouleurTableau)
    Alpha = Alpha(CouleurTableau)
    Debug "RGB(" + Str(Rouge) + ", " + Str(Vert) + ", " + Str(Bleu) + ", " + Str(Alpha) + ") a été utiliser " + Str(NombreCouleurTableau) + " Fois" + Chr(13) + Chr(10)
  Next
  
EndProcedure 

; Procedure pour lire l'image
Procedure LireImage()
  
  If ChargementImage(#Image, 1)
    
    X = 0
    Y = 0
    
    Largeur = ImageWidth(#Image)
    Hauteur = ImageHeight(#Image)
    Profondeur = ImageDepth(#Image)
    
    StartDrawing(ImageOutput(#Image))
    
    Repeat
      
      Couleur = Point(X, Y)
      IndexationPixel(Couleur)
      
      If X <> Largeur - 1
        X + 1
      Else
        X = 0
        Y + 1
      EndIf
      
      EnregistrerPixel(Couleur)
      OpperationPixel(Couleur)
      
    Until X = Largeur - 1 And Y = Hauteur - 1
    
    Couleur = Point(X, Y)
    IndexationPixel(Couleur)
    
    EnregistrerPixel(Couleur)
    OpperationPixel(Couleur)
    
    Debug "Il y a au totale " + Str(TrierPaletteCouleurs()) + " couleurs dans l'image:"
    
    StopDrawing()
    
  EndIf
  
EndProcedure

LireImage()

CreationPaletteCompresser()
ResensementCouleurs()

; FirstElement(CouleurPaletteCompresser.q())
; 
; ForEach PaletteCouleurTrier.q()
;   
;   PremierNombre.q = PaletteCouleurTrier.q()
;   
;   If NextElement(PaletteCouleurTrier.q())
;     CouleurNumero + 1
;     NextElement(CouleurPaletteCompresser.q())
;     SecondNombre.q = PaletteCouleurTrier.q()
;     Debug "Premier nombre = " + Str(PremierNombre.q) + ", Second nombre = " + Str(SecondNombre.q) + ", " + "Différence entre les deux = " + Str(CouleurPaletteCompresser.q()) + " (" + Str(SecondNombre.q) + " - " + Str(PremierNombre.q) + " = " + Str(SecondNombre.q - PremierNombre.q) + ")"
;     PreviousElement(PaletteCouleurTrier.q())
;   Else
;     Break
;   EndIf
;   
; Next
Pour l’utiliser, pouvez-vous crée avec par exemple pain ou autre, ce qui vous plaira, crée un carrer de couleur uni, veuillez commencer par le pixel X n°1 et Y n°1 jusqu’à disons 10 et 10, soit 10 X 10.

Enregistrer votre image et ouvrez-là avec mon code.
Bon après, le logiciel va vous dire le nombre de couleur que contient votre image puis ensuite, il va énumérer la fréquence d’utilisation de chaque couleur de celle-ci.

Le problème est que la deuxième ligne dans le débuguer est fausse car il dit que :
RGB(Couleur) a été utilisé 1 Fois

Et je ne comprends pas pourquoi il fait ça !
Ça doit pas être très compliquer et même surement très bête mais je n’arrive pas a comprendre pourquoi il fait ça !

Excusez-moi pour se long message et merci d’avance pour votre précieuse aide !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Re, un problème avec un code

Message par falsam »

Pour ma part je ne constate pas de probléme. J'ai crée un carré de 100x100 Px en rouge (RGB).
Résultat de l'éxécution

Code : Tout sélectionner

Il y a au totale 1 couleurs dans l'image:
RGB(255, 0, 0, 0) a été utiliser 10000 Fois

RGB(255, 0, 0, 0) a été utiliser 1 Fois
Il y a bien qu'une seule couleur utilisée, 10 000 fois de suite (100 x 100 = 10 000)

PS : Change l’extension Jpeg par jpg.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Brayan
Messages : 19
Inscription : mar. 24/juil./2012 23:06

Re: Re, un problème avec un code

Message par Brayan »

falsam a écrit :Il y a au totale 1 couleurs dans l'image:
RGB(255, 0, 0, 0) a été utiliser 10000 Fois

RGB(255, 0, 0, 0) a été utiliser 1 Fois
Bonsoir,

Si, le dernier RGB(255, 0, 0, 0) a été utiliser 1 Fois est bien une erreur a mon sens :wink:

Car juste au dessus il dis bien que la couleur à été utiliser 10 000 fois, là ok !
mais le dernier n'as rien à faire là !, c'est une erreur j'en suis sûr :)

Tu comprends ?
PS : Change l’extension Jpeg par jpg.
Ah oui merci beaucoup :)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Re, un problème avec un code

Message par falsam »

Ligne 223 commente

Code : Tout sélectionner

;Debug "Il y a au totale " + Str(TrierPaletteCouleurs()) + " couleurs dans l'image:"
TrierPaletteCouleurs() n'a rien à faire ici. Double appel.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Brayan
Messages : 19
Inscription : mar. 24/juil./2012 23:06

Re: Re, un problème avec un code

Message par Brayan »

Merci de prendre de ton temps pour m'aider :)
falsam a écrit :Ligne 223 commente

Code : Tout sélectionner

;Debug "Il y a au totale " + Str(TrierPaletteCouleurs()) + " couleurs dans l'image:"
TrierPaletteCouleurs() n'a rien à faire ici. Double appel.
Même quand je l'enlève, ça ne marche pas quand même :)
Tu devrais avoir juste:
Il y a au totale 1 couleurs dans l'image:
RGB(255, 0, 0, 0) a été utiliser 10000 Fois
Tu comprends ?

Essaie une autre image et tu verra que ça ne marche pas comme je veux, exemple:
RGB(0, 0, 0, 0) a été utiliser 25600 Fois
RGB(0, 0, 0, 0) a été utiliser 1 Fois
RGB(127, 127, 127, 0) a été utiliser 25600 Fois
RGB(136, 0, 21, 0) a été utiliser 25600 Fois
RGB(237, 28, 36, 0) a été utiliser 25600 Fois
RGB(255, 127, 39, 0) a été utiliser 25600 Fois
RGB(255, 242, 0, 0) a été utiliser 25600 Fois
RGB(34, 177, 76, 0) a été utiliser 25600 Fois
RGB(0, 162, 232, 0) a été utiliser 25600 Fois
RGB(63, 72, 204, 0) a été utiliser 25600 Fois
RGB(163, 73, 164, 0) a été utiliser 25600 Fois
RGB(195, 195, 195, 0) a été utiliser 25600 Fois
RGB(185, 122, 87, 0) a été utiliser 25600 Fois
RGB(255, 174, 201, 0) a été utiliser 25600 Fois
RGB(255, 201, 14, 0) a été utiliser 25600 Fois
RGB(239, 228, 176, 0) a été utiliser 25600 Fois
RGB(181, 230, 29, 0) a été utiliser 25600 Fois
RGB(153, 217, 234, 0) a été utiliser 25600 Fois
RGB(112, 146, 190, 0) a été utiliser 25600 Fois
RGB(200, 191, 231, 0) a été utiliser 25600 Fois
RGB(255, 255, 255, 0) a été utiliser 25600 Fois
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Re, un problème avec un code

Message par falsam »

Merdum je dis n'importe quoi !!! De-commente cette ligne 223.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Brayan
Messages : 19
Inscription : mar. 24/juil./2012 23:06

Re: Re, un problème avec un code

Message par Brayan »

Ok, ok, t'énèrve pas !

Mais tu voies, ça ne marche pas quand même !
RGB(0, 0, 0, 0) a été utiliser 25600 Fois
RGB(0, 0, 0, 0) a été utiliser 1 Fois
RGB(127, 127, 127, 0) a été utiliser 25600 Fois
RGB(136, 0, 21, 0) a été utiliser 25600 Fois
RGB(237, 28, 36, 0) a été utiliser 25600 Fois
RGB(255, 127, 39, 0) a été utiliser 25600 Fois
RGB(255, 242, 0, 0) a été utiliser 25600 Fois
RGB(34, 177, 76, 0) a été utiliser 25600 Fois
RGB(0, 162, 232, 0) a été utiliser 25600 Fois
RGB(63, 72, 204, 0) a été utiliser 25600 Fois
RGB(163, 73, 164, 0) a été utiliser 25600 Fois
RGB(195, 195, 195, 0) a été utiliser 25600 Fois
RGB(185, 122, 87, 0) a été utiliser 25600 Fois
RGB(255, 174, 201, 0) a été utiliser 25600 Fois
RGB(255, 201, 14, 0) a été utiliser 25600 Fois
RGB(239, 228, 176, 0) a été utiliser 25600 Fois
RGB(181, 230, 29, 0) a été utiliser 25600 Fois
RGB(153, 217, 234, 0) a été utiliser 25600 Fois
RGB(112, 146, 190, 0) a été utiliser 25600 Fois
RGB(200, 191, 231, 0) a été utiliser 25600 Fois
RGB(255, 255, 255, 0) a été utiliser 25600 Fois
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Re, un problème avec un code

Message par G-Rom »

@falsam
Sans dec, tu débarques sur le forum ?
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: [LOCKED] Re, un problème avec un code

Message par TazNormand »

Premier message verrouillé, celui-ci également.

Message à Fred pour Ban de Brayan (=Dayvid, IP concordantes)
Image
Image
Verrouillé