lecture et reproduction image + génération code

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

lecture et reproduction image + génération code

Message par dayvid »

Bonjour, j'ai fait ceci dans l'espérance de sortir quelque chose de concret
mais je rencontre des soucis

Le programme lit une image, la reproduis sur une fenêtre et génère un code
en hexadécimale

Ensuite j’avais dans l'idée de convertir ce code en caractère unique (j'ai prix chinois car les caractère mon plus)
en gros j'explique le principe:

lecture du pixel de l'image, reproduction du pixel sur une fenêtre et génération du code hexadécimale, disons plutôt conversion de la couleur lut du pixel en hexadécimale
chaque pixel est fait de cette façon, a la fin le programme enregistre le code générer dans un fichier texte

Le but aurais été ensuite de reconvertir le code (la couleur hexadécimale) en caractère chinois mais j'ai des soucis pour
lire le fichier ou sont les caractère (table de caractère), le programme ne reconnais pas les caractère
mais pourtant je lui est dit de lire le fichier en mode Unicode

Bon en gros quand il a convertit la couleur en hexadécimale, il doit ouvrir le fichier (fait préalablement pour pas le refaire a chaque fois)
puis il cherche dans le fichier la couleur qui correspond, ensuite il reconvertit donc cette couleur avec le caractère chinois
Exemple:

Lecture d'un pixel >> D5 (couleur converti en hexadécimale)
Recherche de la couleur dans le fichier et conversion de celle-ci >> D5 = 蔔
Etc.

je ne sais pas si j'ai été asses clair mais j'ai fait ce que j'ai pue :wink:

En gros c'est pour faire un algorithme de compression
Je ne sais pas trop ou je vais mais je fait quand même 8)

Code : Tout sélectionner

#ImageLecture = 1
#ImageEcriture = 2

UsePNGImageDecoder()
UseJPEGImageDecoder()

Global NewList CreationCodeImage.s()

; Procedure de chargement d'une image
Procedure ChargementImage()
  Chargement_Image:
  Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpg (*.Jpg)|*.Jpg"
  FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, 0)
  
  If FichierImage$
    
    If FindString(GetFilePart(FichierImage$), ".bmp", 1) Or FindString(GetFilePart(FichierImage$), ".png", 1) Or FindString(GetFilePart(FichierImage$), ".jpg", 1)
      ; Ok
    Else
      MessageRequester("Fichier invalide !", "      Veuillez choisir un fichier d'image valide !", 48)
      ProcedureReturn 0
    EndIf
    
    If LoadImage(#ImageLecture, FichierImage$)
      ; Ok
    Else
      MessageRequester("Erreur de chargement !", "      Impossible de charger le fichier " + Chr(34) + GetFilePart(FichierImage$) + Chr(34) + " !", 16)
      ProcedureReturn 0
    EndIf
    
  Else
    
  EndIf
  
  ProcedureReturn 1
EndProcedure

Procedure CompressionCodeImage(CodeImage$)
  
  If ReadFile(1, "Table de caractères de 1 octets.txt") ; Si le fichier peut être lu , on continue...
    While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
      Ligne$ = ReadString(1, #PB_Unicode)
      PositionExtraction = FindString(Ligne$, "=", 1) + 2
      Caractere$ = Mid(Ligne$, PositionExtraction, 1) ; Affiche ligne par ligne le contenu du fichier
      Debug Ligne$
      
    Wend
    CloseFile(1) ; Ferme le fichier précédemment ouvert
  Else ; Sinon ont affiche un message d'avertissement
    MessageRequester("Information", "Impossible d'ouvrir le fichier !")
  EndIf
  
EndProcedure

Procedure CreationImage()
  
  Enumeration
    #Fenetre
    #ImageGadget
  EndEnumeration
  
  If OpenWindow(#Fenetre, 439, 170, 600, 300, "Fenêtre",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    ImageGadget(#ImageGadget, 1, 1, 100, 100, ImageID(#ImageEcriture))
    
    Repeat ; Start of the event loop
      
      Event = WaitWindowEvent(1) ; This line waits until an event is received from Windows
      WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
      GadgetID = EventGadget() ; Is it a gadget event?
      EventType = EventType() ; The event type
      EventMenu = EventMenu() ; The event Menu
      
      SetGadgetState(#ImageGadget, ImageID(#ImageEcriture))
      
      If Event = #PB_Event_Gadget
        
        If GadgetID = 0
          
        ElseIf GadgetID = 0
          
        ElseIf GadgetID = 0
          
        EndIf
        
      ElseIf Event = #PB_Event_Menu
        
        If EventMenu = 0
          
        ElseIf EventMenu = 0
          
        ElseIf EventMenu = 0
          
        EndIf
        
      EndIf
      
      
    Until Event = #PB_Event_CloseWindow ; End of the event loop
    
  EndIf
EndProcedure

; Lecture de l'image entière
Procedure LectureImage()
  
  CreateImage(#ImageEcriture, 6500, 4200)
  
  If IsImage(#ImageLecture) And IsImage(#ImageEcriture) ; Si les images sont initialisée
    
    ; Calcule de la taille de l'image
    LargeurImage = ImageWidth(#ImageLecture)
    HauteurImage = ImageHeight(#ImageLecture)
    
    X = -1
    Y = 0
    
    ; Ont répète jusqu'a ce que tous les pixels de l'image soit lue
    For LectureImage = 1 To LargeurImage * HauteurImage
      
      ; Si ont est arriver a la fin de la ligne de l'image et qu'ont n'est pas sur la dernière ligne de celle-ci
      If X = LargeurImage - 1 And Y < HauteurImage
        
        Y + 1 ; Ont va a la ligne suivente
        X = 0 ; Ont réinitialise la variable X avec la valeur 0 pour pouvoir lire la ligne suivente a partir du pixel 1
        
        ; Sinon si ont est arriver a la fin de la ligne de l'image et qu'ont n'est sur la dernière ligne de celle-ci
      ElseIf X = LargeurImage And Y = HauteurImage
        
        Break ; Ont sort de la boucle puisque ont a terminer la lecture de l'image
        
      Else
        X + 1 ; Sinon si ont est pas arriver a la fin de la ligne de l'image, ont lit le prochain pixel de la ligne de celle-ci
      EndIf
      
      StartDrawing(ImageOutput(#ImageLecture))
      CouleurPixel = Point(X, Y) ; Ont lit la couleur du pixel lue actuellement
      StopDrawing()
      
      AddElement(CreationCodeImage())
      CreationCodeImage() = RSet(Hex(CouleurPixel), 2, "0")
      
      StartDrawing(ImageOutput(#ImageEcriture))
      Plot(X, Y, CouleurPixel) ; Ont déssine le pixel qu'ont viens de lire sur la seconde image
      StopDrawing()
      
    Next
    
  EndIf
  
  OpenFile(99, "abc.txt")
  
  ForEach CreationCodeImage()
    WriteString(99, CreationCodeImage())
  Next
  
  CloseFile(99)
  
  CreationImage()
  
EndProcedure

; Repète jusqu'a ce qu'un fichier soit charger correctement ou que le bouton Annuler soit appuiyer
Repeat
Until ChargementImage() = 1

CompressionCodeImage(CodeImage$)
LectureImage()

; Question

; Pourquoi les oppérations de déssins sur une surface de déssins commence a 0 pixel en X et Y ?
; Je trouce ça complètement ilogique, ça ma causer d'ailleur quelques tor !
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lecture et reproduction image + génération code

Message par Ar-S »

Une inspiration quelconque ? :mrgreen:

Par contre le coup de texte en chinois je trouve cela vaseux. on a pas tous les caractères chinois sur nos machines me semble t il.
~~~~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
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: lecture et reproduction image + génération code

Message par dayvid »

bin oui ùmais là c que du brouillon et c pas top en plus :)
si vous avez mieux je prends
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: lecture et reproduction image + génération code

Message par jbernard13 »

ton code marche trés mal , quand je charge une image il me marque " Impossible de charger le fichier" et apres j'ai mon image chargée dans une fenetre .
Jbernard13
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lecture et reproduction image + génération code

Message par Ar-S »

Je ne vais pas faire ton prog, par contre il faut absolument que tu comprennes ce que tu fais ! J'ai l'impression que tu copies/colles des bouts par ci par là (ça on le fait tous) et que si "ça plante pas", c'est gagné ! Et ben non, tu n'arriveras à rien si c'est le cas. la compréhension c'est le plus important.

J'ai refais ta 1ere procédure et je l'ai commenté. Prends vraiment le temps de la comparer avec ce que tu as fais.
Je veux pas que tu viennes chouiner en disant que t'es une merde et que tu piges rien, je veux que tu comprennes ce que tu codes.

Donc TU DOIS répondre au 3 Questions que je t'ai posé dans ce code.

Code : Tout sélectionner

    ; QUESTION 1
    ; pourquoi j’écris 1 aprés Enumération ?
    
    Enumeration 1 ; 
      #ImageLecture 
      #ImageEcriture 
    EndEnumeration
    
    ; Procedure de chargement d'une image - 3 formats acceptés
    Procedure.b ChargementImage(ImageAcharger.l) 
      
      ; Si tu ne mets un label Chargement_Image: et que tu l'appelles hors procédure, bonjour les plantages, tu n'en as pas besoin ici 
      
      ; D'abord le filtre pour n'affichier QUE les 3 formats
      Filtre$ = "Fichiers images (jpg,bmp,png)|*.jpg;*.png*.bmp;" 
      FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, 0) 
      If FichierImage$ 
        
        ; QUESTION 2
        ; Si tu cherches à vérifier les extensions, il y a une commande pour ça ! : GetExtensionPart(FichierImage$) = "bmp"
        ; mais tu n'en as pas besoin ici, POURQUOI ?
        
        ; note : Ta boucle pouvait donner une erreur si un fichier s’appelait par exemple loana.bmp.doc
        
        ;Donc tu continues DANS CE MÊME "IF" le chargement de l'image vu qu'elle existe 
        
        ImageChargee = LoadImage(#ImageLecture, FichierImage$) 
        Debug "Image numéro "+Str(ImageChargee)
        
        ; et tu retournes ta valeur 1 ou #true
        ProcedureReturn 1
        
      Else 
        ; Sinon tu retournes la valeur 0 ou #False pour signifier que ça a foiré
        ProcedureReturn 0
        
      EndIf 
    EndProcedure 
    
    
    ;- //PROGRAMME
    
    ; QUESTION 3
    ; pourquoi cette ligne : If ChargementImage(#ImageLecture) = #True
    
    If ChargementImage(#ImageLecture) = #True
      Debug "images valide chargée !"
      
      ;(ICI ton code qui va la traiter, l'afficher, la redimensionner etc etc)
      
      ;puis une fois terminé, tu libères la mémoire qui lui a été allouée.
      FreeImage(#ImageLecture)
      
    Else
      Debug " Aucun fichier n'a été chargé"
    EndIf
Prends ton temps.

note : JB le simple faite que tu l'ai lancé montre que tu ne l'as pas bien regardé...
~~~~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
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: lecture et reproduction image + génération code

Message par jbernard13 »

regardé quoi?
Jbernard13
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: lecture et reproduction image + génération code

Message par dayvid »

AR-S, merci du fond du cœur pour ton message :)
Je te promet que j'y répondrait avec soins :P

J'ai peut être copier coller des bout de code quoique je fait moi même
mes programme et pas bêtement en copient collent du code

Non sérieux sinon sa ne sert a rien :(

et après vérification rapide, je ne croix pas avoir copier un seule code !!!
je ne suis pas un tricheur !

Voilà a bientôt ! :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lecture et reproduction image + génération code

Message par Ar-S »

Mais je te dis pas de pas copier de code ! Je te dis que le plus important est de comprendre ton listing !
Bref, j'attends les réponses.
~~~~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
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: lecture et reproduction image + génération code

Message par dayvid »

Salut Ar-S !

J'ai fait de mon mieux !

Code : Tout sélectionner

; QUESTION 1
    ; pourquoi j’écris 1 aprés Enumération ?
    ; Réponce : pour commencer l'énumération des variables a partire de la valeur 1, toutes les autres variables seron alors augmenter de 1
    ; là ici, #ImageLecture sera = a 1, #ImageEcriture sera = 2
    ; Bien, ceci n'étais frenchement pas compliquer car je le savais déja, cependent je l'utilise peut c'est vraix
    
    Enumeration 1 ; 
      #ImageLecture 
      #ImageEcriture 
    EndEnumeration
    
    ; Procedure de chargement d'une image - 3 formats acceptés
    Procedure.b ChargementImage(ImageAcharger.l) 
      
      ; Si tu mets un label Chargement_Image: et que tu l'appelles hors procédure, bonjour les plantages, tu n'en as pas besoin ici 
      ; Pourquoi est-je mis ça, je n'est pas compris, ça fait quoi si je fait ça et que j'appel le label hors procedure ?
      
      ; D'abord le filtre pour n'affichier QUE les 3 formats
      Filtre$ = "Fichiers images (jpg,bmp,png)|*.jpg;*.png;*.bmp;"
      ; Il y avais une erreur dans ton code, tu avais oublier une virgule, du coup seule l'extantion "jpg" apparaissais !
      FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, 0)

      If GetExtensionPart(FichierImage$) = "bmp" Or GetExtensionPart(FichierImage$) = "png" Or GetExtensionPart(FichierImage$) = "jpg"
        
      If FichierImage$
        
        ; QUESTION 2
        ; Si tu cherches à vérifier les extensions, il y a une commande pour ça ! : GetExtensionPart(FichierImage$) = "bmp"
        ; mais tu n'en as pas besoin ici, POURQUOI ?
        
        ; Tu veut dire plutôt: If GetExtensionPart(FichierImage$) = "bmp" non ?
        ; Parce que ont as spécifier des filtres et qu'on ne peut prendre que ceux-ci
        ; Mais moi aussi je l'es fait non ?
        
        ; note : Ta boucle pouvait donner une erreur si un fichier s’appelait par exemple loana.bmp.doc
        ; Oui si tu ecrivais "loana.bmp.doc" dans le champ et que tu validais ensuite !
        ; Mais ici il se passe la mêm chose !!!
        
        ;Donc tu continues DANS CE MÊME "IF" le chargement de l'image vu qu'elle existe 
        
        ImageChargee = LoadImage(#ImageLecture, FichierImage$) 
        Debug "Image numéro "+Str(ImageChargee)
        
        ; et tu retournes ta valeur 1 ou #true
        ProcedureReturn 1
        
      Else 
        ; Sinon tu retournes la valeur 0 ou #False pour signifier que ça a foiré
        ProcedureReturn 0
        
      EndIf 
      
      Else
        If FichierImage$ <> ""
          MessageRequester("Erreur de chargement !", "      Ce fichier n'est pas une images valide !", 16)
          ChargementImage(ImageAcharger.l)
        EndIf
      EndIf
      
    EndProcedure 
    
    
    ;- //PROGRAMME
    
    ; QUESTION 3
    ; pourquoi cette ligne : If ChargementImage(#ImageLecture) = #True
    
    If ChargementImage(#ImageLecture) = #True
      ; Je bloque a cette question car pour moi: "If ChargementImage(#ImageLecture)" marcherais aussi bien, mais en pratique ça ne marche pas, je ne sais pas pourquoi
      ; pour moi "If ChargementImage(#ImageLecture)" veut dire: Si ChargementImage(#ImageLecture) <> 0
      Debug "images valide chargée !"
      
      ;(ICI ton code qui va la traiter, l'afficher, la redimensionner etc etc)
      
      ;puis une fois terminé, tu libères la mémoire qui lui a été allouée.
      FreeImage(#ImageLecture)
      
    Else
      Debug " Aucun fichier n'a été chargé"
    EndIf

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: lecture et reproduction image + génération code

Message par dayvid »

J'ai fait ceci dans un autre style !

Ça convertie toutes vos images en code hexadécimale !

Parfois si on compresse tous les fichiers texte par apport a si c'étais des images, la compression est meilleur !!!

Remarque: j'ai remarqué que ça ne fonctionnais bien que sur le forma PNG et à condition que
il n'y est pas de couche alpha, bref, j'ai mis un moment a faire ceci mais ce n'est pas
encore terminer !
et qui sais, ça ne sert sens doute a rien :roll:

Code : Tout sélectionner

Global NewList CheminFichier.s()
Global NewList NomFichier.s()
Global NewList ExtantionFichier.s()
Global NombreFichiersEditeur

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_explorateur_fichier
  #MenuePopup
  #Button_supprimer
  #Button_ajouter
  #Button_valider
  #Button_quitter
  #FichierImage
  #FichierTest
  #FichierTexte
EndEnumeration

Procedure DisableAero(WindowsID.i, State.i)
  If OpenLibrary(0, "dwmapi.dll")
    If State
      State = 1
    Else
      State = 2
    EndIf
    
    CallFunction(0, "DwmSetWindowAttribute", WindowsID, 2, @State, SizeOf(Long))
    CloseLibrary(0)
  EndIf
EndProcedure

Procedure GetAssociatedFileIcon(IconPath.s, IconSize)
  Protected FileInfo.SHFILEINFO
  SHGetFileInfo_(IconPath, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_ICON | IconSize) 
  ProcedureReturn FileInfo\hIcon 
EndProcedure

Procedure SupprimerFichier()
  
  NombreFichiers = CountGadgetItems(#ListIcon_explorateur_fichier)
  
  For VerifficationSelection = NombreFichiers - 1 To 0 Step - 1
    SelectionFichiers = GetGadgetItemState(#ListIcon_explorateur_fichier, VerifficationSelection)
    
    If SelectionFichiers = #PB_ListIcon_Checked Or SelectionFichiers = #PB_ListIcon_Checked | #PB_ListIcon_Selected
      Checked = 1
      Break
    EndIf
    
    Checked = 0
    
  Next
  
  If Checked = 1
    Reponce = MessageRequester("Attention", "      Vous êtes sur de vouloir supprimer ces fichiers ?", 52)
    
    If Reponce = 6
      SelectionFichiers$ = ""
      
      For VerifficationSelection = NombreFichiers - 1 To 0 Step - 1
        SelectionFichiers = GetGadgetItemState(#ListIcon_explorateur_fichier, VerifficationSelection)
        Debug "Element " + Str(VerifficationSelection) + " (" + GetGadgetItemText(#ListIcon_explorateur_fichier, VerifficationSelection, 0) + ")" + " = " + Str(SelectionFichiers)
        If SelectionFichiers = #PB_ListIcon_Checked Or SelectionFichiers = #PB_ListIcon_Checked | #PB_ListIcon_Selected
          RemoveGadgetItem(#ListIcon_explorateur_fichier, VerifficationSelection)
          ;Debug VerifficationSelection
        EndIf
        
      Next
      
    EndIf
    
  EndIf
  
EndProcedure

Procedure FenetreChoixFichier()
  If OpenWindow(#Window_0, 421, 212, 425, 262, "Convertisseur de fichier image vers fichier texte",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    DisableAero(WindowID(#Window_0), 1)
    
    WindowBounds(#Window_0, 365, 250, #PB_Ignore, #PB_Ignore)
    
    ListIconGadget(#ListIcon_explorateur_fichier, 10, 10, 405, 205, "Fichiers", 9999, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines)
    
    CreatePopupMenu(#MenuePopup)
    MenuItem(1, "Cocher la selection")
    MenuItem(2, "Décocher la selection")
    MenuBar()
    MenuItem(3, "Supprimer la selection")
    MenuBar()
    MenuItem(4, "Sélectionner Tous")
    MenuItem(5, "Désélectionner Tous")
    
    ButtonGadget(#Button_supprimer, 130, 225, 70, 25, "Supprimer")
    ButtonGadget(#Button_ajouter, 55, 225, 70, 25, "Ajouté")
    ButtonGadget(#Button_valider, 220, 225, 70, 25, "Valider")
    ButtonGadget(#Button_quitter, 295, 225, 70, 25, "Quitter")
    
    PureRESIZE_SetGadgetResize(#ListIcon_explorateur_fichier, 1, 1, 1, 1)
    
    PureRESIZE_SetGadgetResize(#Button_supprimer, 1, 0, 1, 1)
    PureRESIZE_SetGadgetProportionalResize(#Button_supprimer, 1, 0, 0, 0)
    
    PureRESIZE_SetGadgetResize(#Button_ajouter, 1, 0, 1, 1)
    PureRESIZE_SetGadgetProportionalResize(#Button_ajouter, 1, 0, 0, 0)
    
    PureRESIZE_SetGadgetResize(#Button_valider, 1, 0, 1, 1)
    PureRESIZE_SetGadgetProportionalResize(#Button_valider, 1, 0, 0, 0)
    
    PureRESIZE_SetGadgetResize(#Button_quitter, 1, 0, 1, 1)
    PureRESIZE_SetGadgetProportionalResize(#Button_quitter, 1, 0, 0, 0)
    
  EndIf
  
  Repeat ; Start of the event loop
    
    Event = WaitWindowEvent() ; This line waits until an event is received from Windows
    WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
    GadgetID = EventGadget() ; Is it a gadget event?
    Menu = EventMenu()
    EventType = EventType() ; The event type
    
    If Event = #PB_Event_Gadget
      
      If GadgetID = #ListIcon_explorateur_fichier
        
        If EventType = #PB_EventType_LeftDoubleClick
          Selection = GetGadgetState(#ListIcon_explorateur_fichier)
          
          If Selection > -1
            EtasSelection = GetGadgetItemState(#ListIcon_explorateur_fichier, Selection)
            
            If EtasSelection = 1
              SetGadgetItemState(#ListIcon_explorateur_fichier, Selection, 3)
            ElseIf EtasSelection = 3
              SetGadgetItemState(#ListIcon_explorateur_fichier, Selection, 1)
            EndIf
            
          EndIf
          
        ElseIf EventType = #PB_EventType_RightClick
          DisplayPopupMenu(#MenuePopup,WindowID(#Window_0))  
        EndIf
        
      ElseIf GadgetID = #Button_supprimer
        SupprimerFichier()
        
      ElseIf GadgetID = #Button_ajouter
        RepertoireUtilisateur$ = GetHomeDirectory()
        RepertoireUtilisateur$ + "\Bureau\"
        FichierParDefaut$ = RepertoireUtilisateur$
        Filtre$ = "Tous les fichiers (*.*)|*.*"
        Filtre  = 0
        NombreFichier = 0
        
        SelectionFichier$ = OpenFileRequester("Choisissez un ou plusieurs fichier à charger", FichierParDefaut$, Filtre$, Filtre, #PB_Requester_MultiSelection )
        
        While SelectionFichier$
          
          NomFichier$ = GetFilePart(SelectionFichier$)
          CheminFichier$ = GetPathPart(SelectionFichier$)
          
          NombreFichier + 1
          
          NombreFichiersEditeur = CountGadgetItems(#ListIcon_explorateur_fichier)
          
          For VerifficationFichiers = 0 To NombreFichiersEditeur
            NomFichiers$ = GetGadgetItemText(#ListIcon_explorateur_fichier, VerifficationFichiers)
            
            If NomFichiers$ <> SelectionFichier$
              Trouver = 0
              Continue
            Else
              Trouver = 1
              Break
            EndIf
            
          Next
          
          If Trouver = 0
            AddGadgetItem(#ListIcon_explorateur_fichier, -1, CheminFichier$ + NomFichier$, GetAssociatedFileIcon(SelectionFichier$, #SHGFI_SMALLICON))
          EndIf
          
          SelectionFichier$ = NextSelectedFileName()
          
        Wend
        
      ElseIf GadgetID = #Button_valider
        NombreFichiersEditeur = CountGadgetItems(#ListIcon_explorateur_fichier)
        
        For VerifficationFichiers = 0 To NombreFichiersEditeur
          SelectionFichier$ + GetGadgetItemText(#ListIcon_explorateur_fichier, VerifficationFichiers) + "|"
        Next
        
        CloseWindow(#Window_0)
        Break
        
      ElseIf GadgetID = #Button_quitter
        End
        
      EndIf
      
    ElseIf Event = #PB_Event_Menu
      If Menu = 1 ; Cocher la selection
        
        NombreFichiers = CountGadgetItems(#ListIcon_explorateur_fichier)
        
        For DecocheCase = 1 To NombreFichiers
          EtasSelection = GetGadgetItemState(#ListIcon_explorateur_fichier, DecocheCase - 1)
          
          If EtasSelection = 1 
            SetGadgetItemState(#ListIcon_explorateur_fichier, DecocheCase - 1, 3)
          EndIf
          
        Next
        
      ElseIf Menu = 2 ; Décocher la selection
        
        NombreFichiers = CountGadgetItems(#ListIcon_explorateur_fichier)
        
        For DecocheCase = 1 To NombreFichiers
          EtasSelection = GetGadgetItemState(#ListIcon_explorateur_fichier, DecocheCase - 1)
          
          If EtasSelection = 3
            SetGadgetItemState(#ListIcon_explorateur_fichier, DecocheCase - 1, 1)
          EndIf
          
        Next
        
      ElseIf Menu = 3 ; Supprimer la selection
        SupprimerFichier()
        
      ElseIf Menu = 4 ; Sélectionner Tous
        
        NombreFichiers = CountGadgetItems(#ListIcon_explorateur_fichier)
        
        For SelectionCase = 0 To NombreFichiers
          EtasSelection = GetGadgetItemState(#ListIcon_explorateur_fichier, SelectionCase)
          
          If EtasSelection <> #PB_ListIcon_Selected
            SetGadgetItemState(#ListIcon_explorateur_fichier, SelectionCase, #PB_ListIcon_Selected)
          EndIf
          
        Next
        
      ElseIf Menu = 5 ; Désélectionner Tous
        
        NombreFichiers = CountGadgetItems(#ListIcon_explorateur_fichier)
        
        For SelectionCase = 0 To NombreFichiers
          EtasSelection = GetGadgetItemState(#ListIcon_explorateur_fichier, SelectionCase)
          
          If EtasSelection = #PB_ListIcon_Selected
            SetGadgetItemState(#ListIcon_explorateur_fichier, SelectionCase, 0)
          EndIf
          
        Next
        
      EndIf
      
    EndIf
    
    If Event = #PB_Event_CloseWindow
      CloseConsole()
      End
    EndIf
    
  Until Event = #PB_Event_CloseWindow ; End of the event loop
  
  Index = 0
  
  Repeat
    
    Index + 1
    
    Selection1Fichier$ = StringField(SelectionFichier$, Index, "|")
    
    NomFichier$ = GetFilePart(Selection1Fichier$)
    CheminFichier$ = GetPathPart(Selection1Fichier$)
    ExtensionFichier$ = GetExtensionPart(Selection1Fichier$)
    
    AddElement(NomFichier())
    NomFichier() = NomFichier$
    
    AddElement(CheminFichier())
    CheminFichier() = CheminFichier$
    
    AddElement(ExtantionFichier())
    ExtantionFichier() = ExtensionFichier$
    
  Until Selection1Fichier$ = ""
  
EndProcedure

Procedure AffichageInformationConsole(NomImage$, Largeur, Hauteur, PourcentageAccomplie, PourcentagetotaleAccomplie, FichierTraiter)
  If PourcentageAccomplie > 100
    PourcentageAccomplie = 100
  EndIf
  ClearConsole()
  PrintN("")
  PrintN("  Nom de l'image: " + NomImage$)
  PrintN("")
  PrintN("  Largeur: " + Str(Largeur))
  PrintN("  Hauteur: " + Str(Hauteur))
  PrintN("")
  PrintN("  Pourcentage accomplie: " + Str(PourcentageAccomplie) + "%")
  PrintN("  Pourcentage totale accomplie: " + Str(PourcentagetotaleAccomplie) + "%")
  PrintN("")
  PrintN("  Fichier Traiter: " + Str(FichierTraiter) + " / " + Str(NombreFichiersEditeur))
  PrintN("")
EndProcedure

Procedure ComvertImageToTexte(FichierImage$, Largeur, Hauteur)
  
  Static PourcentagetotaleAccomplie.f
  Static FichierTraiter.f
  
  PourcentageParFichier.f = 100 / NombreFichiersEditeur
  Reste = 100 % NombreFichiersEditeur
  
  If FichierTraiter = NombreFichiersEditeur
    PourcentagetotaleAccomplie + Reste
  EndIf
  
  NomFichier$ = GetFilePart(FichierImage$)
  ExtensionFichier$ = GetExtensionPart(FichierImage$)
  
  NombreDePoint = CountString(NomFichier$, ".")
  
  If NombreDePoint > 1
    For RechercheDernierPoint = 1 To NombreDePoint
      PositionDepart = FindString(NomFichier$, ".", PositionDepart)
    Next
  Else
    PositionDepart = FindString(NomFichier$, ".", 1)
  EndIf
  
  If OpenFile(#FichierTexte, Mid(NomFichier$, 1, PositionDepart) + Str(Largeur) + "." + Str(Hauteur) + "." + ExtensionFichier$ + ".txt")
    
    X = 0
    Y = 0
  
    StartDrawing(ImageOutput(#FichierImage))
    
    PixelTotale = ImageWidth(#FichierImage) * ImageHeight(#FichierImage)
    Pourcentage = PixelTotale / 100
    
    Repeat
      
      PixelFait + 1
      
      If PixelFait => Pourcentage
        PixelFait = 0
        PourcentageAccomplie + 1
        AffichageInformationConsole(NomFichier$, Largeur, Hauteur, PourcentageAccomplie, PourcentagetotaleAccomplie, FichierTraiter)
      EndIf
      
      If X = ImageWidth(#FichierImage) And Y < ImageHeight(#FichierImage) + 1
        Y + 1
        X = 0
        
        If Y = ImageHeight(#FichierImage)
          Break
        EndIf
        
      EndIf
      
      R = Red(Point(X, Y))
      V = Green(Point(X, Y))
      B = Blue(Point(X, Y))
      
      WriteString(#FichierTexte, RSet(Hex(Point(X, Y)), 6, "0"))
      
      X + 1
      
    Until Y = ImageHeight(#FichierImage)
    
    StopDrawing()
    CloseFile(#FichierTexte)
    
  Else
    
  EndIf
  
  PourcentagetotaleAccomplie + PourcentageParFichier
  FichierTraiter + 1
  
  If FichierTraiter = NombreFichiersEditeur
    AffichageInformationConsole(NomFichier$, Largeur, Hauteur, 100, 100, FichierTraiter)
  EndIf

EndProcedure

Procedure VerifficationFichierImage()
  
  UseJPEGImageDecoder() 
  UseJPEG2000ImageDecoder() 
  UsePNGImageDecoder() 
  UseTIFFImageDecoder() 
  UseTGAImageDecoder() 
  
  FirstElement(NomFichier())
  FirstElement(ExtantionFichier())
  
  ForEach CheminFichier()
    
    If CheminFichier() <> ""
      Recommencer:
      If LoadImage(#FichierImage, CheminFichier() + NomFichier())
        ComvertImageToTexte(CheminFichier() + NomFichier(), ImageWidth(#FichierImage), ImageHeight(#FichierImage))
      Else
        If LCase(ExtantionFichier()) <> "bmp" And LCase(ExtantionFichier()) <> "jpg" And LCase(ExtantionFichier()) <> "jpg2" And LCase(ExtantionFichier()) <> "png" And LCase(ExtantionFichier()) <> "tif" And LCase(ExtantionFichier()) <> "tga"
          Cause$ = "Ce fichier n'est pas une image !"
        Else
          If ReadFile(#FichierTest, CheminFichier() + NomFichier()) 
            Cause$ = "Ce fichier est inaccessible !"
          Else
            Cause$ = "Ce fichier n'éxiste plus !"
          EndIf
        EndIf
        
        Reponce = MessageRequester("Erreur de chargement", "                         Impossible de charger l'image suivente: " + Chr(13) + Chr(13) + Chr(13) + "Chemin du fichier: " + Chr(13) + CheminFichier() + Chr(13) + Chr(13) + "Nom du fichier: "  + Chr(13) + NomFichier() + Chr(13) + Chr(13) + "Cause possible: " + Chr(13) + cause$ + Chr(13), 18)
        
        If Reponce = 3 ; Abandonner
          ProcedureReturn 0
        ElseIf Reponce = 4 ; Recommencer
          Goto Recommencer 
        EndIf
        
      EndIf
      
      NextElement(NomFichier())
      NextElement(ExtantionFichier())
      
    EndIf
    
  Next

EndProcedure

OpenConsole()
EnableGraphicalConsole(1)
FenetreChoixFichier()
VerifficationFichierImage()
PrintN("  Converssion des fichiers terminer !")
Print("  Appuiyez sur la touche entrée pour fermer la console")
Input()
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: lecture et reproduction image + génération code

Message par Ar-S »

Reponse 1 : ok ^^
; D'abord le filtre pour n'affichier QUE les 3 formats
Filtre$ = "Fichiers images (jpg,bmp,png)|*.jpg;*.png;*.bmp;"
; Il y avais une erreur dans ton code, tu avais oublier une virgule, du coup seule l'extantion "jpg" apparaissais !
Un point virgule ;) pas une virgule

; QUESTION 2
; Si tu cherches à vérifier les extensions, il y a une commande pour ça ! : GetExtensionPart(FichierImage$) = "bmp"
; mais tu n'en as pas besoin ici, POURQUOI ?

; Tu veut dire plutôt: If GetExtensionPart(FichierImage$) = "bmp" non ?
Évidement
; Parce que ont as spécifier des filtres et qu'on ne peut prendre que ceux-ci
; Mais moi aussi je l'es fait non ?

Non, ton code utilisait : FindString(GetFilePart(FichierImage$)
ce qui signifie : "Cherche tel caractère dans le nom de fichier extrait du chemin complet.

Regarde cet exemple qui reprend ta 1ere méthode.
Il dit que l'image est valide alors que non ! c'est un .doc

Code : Tout sélectionner

FichierImage$ = "c:\toto\test.bmp.doc"
If FindString(GetFilePart(FichierImage$), ".bmp", 1) Or FindString(GetFilePart(FichierImage$), ".png", 1) Or FindString(GetFilePart(FichierImage$), ".jpg", 1) 
	Debug "image Valide"
Else 
	Debug "image invalide" 
EndIf 

Code : Tout sélectionner

; Mais ici il se passe la même chose !!!
Non, avec ma procédure, le fichier n'apparaitra pas dans l'explorer vu que son extension = .doc
l'extension ne fait pas parti des filtres et sera ignorée

Dans le chemin : "c:\toto\test.bmp.doc"
FindString(GetFilePart(FichierImage$), ".bmp", 1) va chercher .bmp dans test.bmp.doc et va le trouver, ce qui ne nous intéresse pas !
Ne confond pas avec GetExtensionPart qui lui ne va vérifier que l'extension .doc et va donc bien voir que ce n'est pas un fichier que l'on recherche.

Code : Tout sélectionner

   If ChargementImage(#ImageLecture) = #True
      ; Je bloque a cette question car pour moi: "If ChargementImage(#ImageLecture)" marcherais aussi bien, mais en pratique ça ne marche pas, je ne sais pas pourquoi
      ; pour moi "If ChargementImage(#ImageLecture)" veut dire: Si ChargementImage(#ImageLecture) <> 0    
Notre procédure renvoie 1 ou 0 ce qui équivaut à #True ou #False
Donc autant être précis et dire à notre programme d'effectuer une opération si la procédure renvoie 1 ou une autre si elle revoie 0
tout simplement.

Pas le temps de tester ton code suivant mais j'espère que ça se décante dans ta tête ;).
~~~~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
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: lecture et reproduction image + génération code

Message par dayvid »

Ok , merci a toi Ar-S :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre