Page 1 sur 2

Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 18:10
par Lord Nelson
Salut,

Voici un ch'ti programme basic (Jeu de mot :mrgreen: ) pour savoir le nombre de couleurs que contient une image:

Code : Tout sélectionner

Enumeration 1
  #Fenetre
  #ImageChargement
  #TextGadgetProgressBar
  #TextGadgetInfo
  #TextGadgetInfoPourcentage
  #TextGadgetInfoPixelLue
  #TextGadgetInfoCouleur
EndEnumeration

; Procedure de chargement d'une image
Procedure.l ChargementImage(NumeroImage, FiltreDefaut)
  
  Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpeg (*.Jpg)|*.Jpg;*.Jpeg|Image Tga (*.Tga)|*.Tga|Image Tiff (*.Tiff)|*.Tiff"
  FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, FiltreDefaut)
  
  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 !", "      Se fichier n'est pas une image valide ou n'est pas pris en charge !", 48)
        ProcedureReturn 0
        
    EndSelect
    
  Else
    MessageRequester("Information", "      L'oppération à été annulé.", 64)
    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
  
  ProcedureReturn 0
EndProcedure

; Procedure pour lire l'image
Procedure LireImage()
  
  If ChargementImage(#ImageChargement, 1)
    
    OpenWindow(#Fenetre, 0, 0, 300, 105, "Ressencement des couleurs de l'image...", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_Tool | #PB_Window_ScreenCentered)
    
    TextGadget(#TextGadgetInfo, 10, 10, 280, 15, "Veuillez patienter, Ressencement des couleurs en court...", #PB_Text_Center)
    TextGadget(#TextGadgetInfoPixelLue, 10, 25, 280, 15, "Pixel actuelement lue: 0", #PB_Text_Center)
    TextGadget(#TextGadgetInfoCouleur, 10, 40, 280, 15, "Le nombre actuel de couleurs de l'image est de: ", #PB_Text_Center)
    TextGadget(#TextGadgetProgressBar, 10, 60, 280, 15, "")
    TextGadget(#TextGadgetInfoPourcentage, 10, 80, 280, 15, "Pourcentage accomplie: 0%", #PB_Text_Center)
    
    SetGadgetColor(#TextGadgetProgressBar, #PB_Gadget_FrontColor, RGB(0, 0, 255))
    
    X = 0
    Y = 0
    
    LargeurImage = ImageWidth(#ImageChargement)
    HauteurImage = ImageHeight(#ImageChargement)
    Profondeur = ImageDepth(#ImageChargement)
    
    NewMap MaMapDeCouleur.i(LargeurImage * HauteurImage)
    
    StartDrawing(ImageOutput(#ImageChargement))
    
    Repeat
      
      If (X = LargeurImage And Y < HauteurImage)
        
        X = 0
        Y + 1
        
        Pourcentage.d = (141 / HauteurImage) * Y
        PourcentageTexte.d = (100 / HauteurImage) * Y
        
        If SauvegardePourcentage <> Int(Pourcentage.d)
          
          SauvegardePourcentage = Int(Pourcentage.d)
          ProgressBars$ + "|"
          
          SetGadgetText(#TextGadgetProgressBar, ProgressBars$)
          SetGadgetText(#TextGadgetInfoPixelLue, "Pixel actuelement lue: " + Str(X + (Y * LargeurImage)) + " / " + Str(LargeurImage * HauteurImage))
          SetGadgetText(#TextGadgetInfoCouleur, "Le nombre de couleurs actuel de l'image est de: " + Str(MapSize(MaMapDeCouleur.i())) + ".")
          SetGadgetText(#TextGadgetInfoPourcentage, "Pourcentage accomplie: " + StrD(PourcentageTexte.d, 2) + "%")
          
        EndIf
        
      EndIf
      
      Couleur = Point(X, Y)
      
      AddMapElement(MaMapDeCouleur.i(), Str(Couleur))
      MaMapDeCouleur.i() = Couleur
      
      If ((X + 1) = LargeurImage And (Y + 1) = HauteurImage)
        Break
      EndIf
      
      X + 1
      
      Event = WaitWindowEvent(0)
      
      If Event = #PB_Event_CloseWindow
        End
      EndIf
      
    ForEver
    
    StopDrawing()
    
    ProgressBars$ = ""
    
    For I = 1 To 140
      ProgressBars$ + "|"
    Next
    
    SetGadgetText(#TextGadgetProgressBar, ProgressBars$)
    SetGadgetText(#TextGadgetInfo, "Ressencement des couleurs de l'image terminé.")
    SetGadgetText(#TextGadgetInfoPixelLue, "Pixel actuelement lue: " + Str(LargeurImage * HauteurImage) + " / " + Str(LargeurImage * HauteurImage))
    SetGadgetText(#TextGadgetInfoCouleur, "Le nombre de couleurs totale de l'image est de: " + Str(MapSize(MaMapDeCouleur.i())) + ".")
    SetGadgetText(#TextGadgetInfoPourcentage, "Pourcentage accomplie: 100.00%")
    
    Repeat
      Event = WaitWindowEvent(1)
    Until Event = #PB_Event_CloseWindow
    
    End
    
  EndIf
  
EndProcedure

LireImage()

Re: Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 18:53
par Backup
tu nous gonfle a ne pas poster dans les bons forum !


rien a faire dans Annonce ! ce n'est pas un Logiciel
ça devrait au mieux se trouver dans "Truc et Astuces"

faites gaffes ou vous postez Bordel !

les modos , ils font quoi ?
ils dorment ?

Re: Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 18:55
par Ar-S
* C'est vrai, annonce est réservée aux applications (exe) produites en pb, c'est pas non plus la fin du monde mais ça donne du boulots aux modos (m'enfin bon..)

Concernant ton code
J'ai repris ta procédure de chargement d'image qui avait une coquille avec le jpg et le jpeg. (j'ai modifié ton Filtre$)
J'ai aussi remplacé le if/endif par un select/case, ça permet dans ce cas un code plus concis en mettant plusieurs extensions (jpg, jpeg par exemple).
Enfin, j'utilise GetExtensionPart(), une fonction existe pour récupérer les extensions de fichiers, pourquoi s'embêter avec du findstring ;)

Code : Tout sélectionner

; Procedure de chargement d'une image
Procedure.l ChargementImage(NumeroImage, FiltreDefaut)
 
  Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpeg (*.Jpg)|*.Jpg;*.Jpeg|Image Tga (*.Tga)|*.Tga|Image Tiff (*.Tiff)|*.Tiff"
  FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, FiltreDefaut)
 
  If FichierImage$
   
   Extension$ = LCase( GetExtensionPart(FichierImage$) )
   
   Select Extension$
   		Case "bmp"
      		Debug "BMP"
      		
      	Case "jpg","jpeg"	
      		Debug "Jpeg"
      		 UseJPEGImageDecoder()
     	
     	Case "png"
     		Debug "Png"
     		UsePNGImageDecoder()
     
     	Case "tiff"
     		Debug "tiff"
     		UseTIFFImageDecoder()
     		
     	Case "tga"	
     		Debug "tga"
UseTGAImageDecoder()
     		
     	Default
     		MessageRequester("Fichier invalide !", "      Veuillez choisir un fichier d'image valide !", 48)
		    ProcedureReturn 0
     		
     EndSelect

	Charge = LoadImage(NumeroImage, FichierImage$)
    If Charge <> 0
      ProcedureReturn Charge
    Else
      MessageRequester("Erreur de chargement !", "      Impossible de charger le fichier " + Chr(34) + GetFilePart(FichierImage$) + Chr(34) + " !", 16)
      ProcedureReturn 0
    EndIf
   
  EndIf
 
  ProcedureReturn 0
EndProcedure

Re: Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 18:59
par Backup
Concernant ton code
J'ai repris ta procédure de chargement d'image qui avait une coquille avec le jpg et le jpeg.
J'ai aussi remplacé le if/endif par un select/case, ça permet dans ce cas un code plus concis en mettant plusieurs extensions (jpg, jpeg par exemple).
Enfin, j'utilise GetExtensionPart(), une fonction existe pour récupérer les extensions de fichiers, pourquoi s'embêter avec du findstring
ça sert a rien ,j'ai deja fait ces memes corrections sur son code point et plot()
http://www.purebasic.fr/french/viewtopi ... 5&start=15

, il en tiens pas compte .... :roll:

il me rappel Dayvid .... va savoir :mrgreen:

Re: Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 19:45
par Lord Nelson
tu nous gonfle a ne pas poster dans les bons forum !
Ah bha mince alors, j'ai bien crue pourtant, c'est moche :o
rien a faire dans Annonce ! ce n'est pas un Logiciel
ça devrait au mieux se trouver dans "Truc et Astuces"
Ah :?
C'est quoi alors, des pop-corn :mrgreen:

C'est bien un ch'ti PROGRAMME j'ai dis et basic qui plus est :wink:
Voici un ch'ti programme basic
Certes, je l'es pas compiler en Exe, j'suis confus.
ça sert a rien ,j'ai deja fait ces mêmes corrections sur son code point et plot()
viewtopic.php?f=9&t=14275&start=15

, il en tiens pas compte .... :roll:
Milles excuses Dobro, tu as raison :oops:
En faite c'est que j'ai pas dû mettre à jour le code dans PB car mes exemples son dedans, et je les tire de là, j'ai dû oublié désoler :oops:
Et puis ont peu oublier aussi.

Édit: Code corrigé.

Re: Compteur de couleurs dans une image

Publié : jeu. 13/mars/2014 20:22
par Backup
Lord Nelson a écrit :
rien a faire dans Annonce ! ce n'est pas un Logiciel
ça devrait au mieux se trouver dans "Truc et Astuces"
Ah :?
C'est quoi alors, des pop-corn :mrgreen:

C'est bien un ch'ti PROGRAMME j'ai dis et basic qui plus est :wink:
Voici un ch'ti programme basic
Certes, je l'es pas compiler en Exe, j'suis confus..

Pour ta gouvernes , il y a une difference entre un Prg et un logiciel !

le "prg" au sens ou on l'entends ici , est une ou plusieurs routines , et nous avons acces au code ...

un logiciel est un programme qui propose un environnement complet ,
un menu, une interface utilisateur , etc ... et a dans son contenu , une ribambelles de routines ...
et est compilé ... mais le code peut etre présent dans l'archive
voila voila .... :)

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 8:58
par blendman
Je plussoie Dobro, faut essayer de respecter les rubriques, sinon, on ne s'y retrouve plus, tout est noyé et c'est un peu dommage.

- Pour poster un code (même complet) qui ne fait qu'une ou quelques routines, c'est mieux dans "trucs et astuces"
- pour poster un code qui est un logiciel ou une application (avec l'interface, des boutons, menus, statusbar, plusieurs fonctions terminées, etc...) c'est mieux dans "applications".
- annonces, c'est mieux pour ce qui va au-delà du programme (mises à jour d'un outil ou d'une lib que beaucoup utilisent (droopy par exemple), ou d'un outil (purebasic), ou annonce d'un gros truc (exemple : tel jeu ou telle application réalisée en purebasic est disponible sur tel site, en partenariat avec nintendo et en exclusivité avec windows 9 :mrgreen: )

j'ajouterai même que Annonce ne concerne pas les programmes en tant que tel, sauf s'ils ont un intérêt supérieur au programme lui-même (comme spiderbasic qui est non seulement un nouvel outil, mais avec des mises à jour régulières, des infos, etc...)

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 9:43
par Ar-S
Pour annonce, " sauf s'ils ont un intérêt supérieur au programme lui-même" heu késako :)
il y a une description sous les rubrique, suffit de faire attention.
Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Annonce pour moi regroupe les applis exécutables et fonctionnelles réalisées en PB, ave ou sans codes fournis.

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 9:52
par Lord Nelson
C'est pour ça que j'ai crue bien faire car c'est un programme que j'ai mis là même si c'est pas un exe :)

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 9:59
par Backup
alors toi , tu ne comprends vraiment rien !

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 11:41
par Fred
Dobro a écrit :tu nous gonfle a ne pas poster dans les bons forum !


rien a faire dans Annonce ! ce n'est pas un Logiciel
ça devrait au mieux se trouver dans "Truc et Astuces"

faites gaffes ou vous postez Bordel !

les modos , ils font quoi ?
ils dorment ?
Ca coute rien de rester courtois, merci.

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 13:32
par Backup
c'est pas faux ... :) , mais bon ya des moments , j'envie d'mettre des baffes (meme a toi) :lol:

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 15:38
par Micoute
Dobro, je préfère être ton ami !

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 16:05
par falsam
Micoute a écrit :Dobro, je préfère être ton ami !
C'est dans ces moments là qu'on reconnait la personnalité des gens. Quoi que je m'en suis douté bien avant. :)

Re: Compteur de couleurs dans une image

Publié : sam. 15/mars/2014 16:25
par Backup
notez la difference qu'il ya entre mettre des baffes , et avoir envie d'en donner :)