Compteur de couleurs dans une image

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Compteur de couleurs dans une image

Message 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()
Dernière modification par Lord Nelson le ven. 14/mars/2014 18:01, modifié 4 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message 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 ?
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Compteur de couleurs dans une image

Message 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
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message 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:
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Compteur de couleurs dans une image

Message 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é.
Dernière modification par Lord Nelson le jeu. 13/mars/2014 20:29, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message 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 .... :)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Compteur de couleurs dans une image

Message 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...)
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Compteur de couleurs dans une image

Message 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.
~~~~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
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Compteur de couleurs dans une image

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message par Backup »

alors toi , tu ne comprends vraiment rien !
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Re: Compteur de couleurs dans une image

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message par Backup »

c'est pas faux ... :) , mais bon ya des moments , j'envie d'mettre des baffes (meme a toi) :lol:
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Compteur de couleurs dans une image

Message par Micoute »

Dobro, je préfère être ton ami !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Compteur de couleurs dans une image

Message 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. :)
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%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compteur de couleurs dans une image

Message par Backup »

notez la difference qu'il ya entre mettre des baffes , et avoir envie d'en donner :)
Répondre