Calcul dela taille d'un pixel
Publié : mar. 28/août/2007 16:10
Calcul de la taille d'un pixel
Code : Tout sélectionner
;/ PureBasic 4.10b2
Global Ref_Pixel.f,Ref_Surface
Enumeration
#PANEL
#MONITEUR
#DIAGONALE
#RESOLUTION
#RATIO
#DIMENSIONS
#TAILLEPIXEL
#DIAG_CM
#SURFACE
#STATUSB
#DIFFERENCE_SURFACE
#TEXTE_REFERENCE
#TEXTE_COMPARAISON
#MENU
#REFERENCE
#AJOUTE
#SUPPRIME
#ABOUT
#LARGEURFENETRE=320
#HAUTEURFENETRE=290
EndEnumeration
Procedure CalculHauteur(Diagonale.f,Ratio.f)
ProcedureReturn Diagonale /Sqr((Ratio*Ratio)+1)
EndProcedure
Procedure Calcul()
If GetGadgetText(#RESOLUTION)<>"" And GetGadgetText(#DIAGONALE)<>""
Ratio.f=Val(StringField(GetGadgetText(#RESOLUTION),1,"x"))/Val(StringField(GetGadgetText(#RESOLUTION),2,"x"))
Select StrF(Ratio,2)
Case "1.33"
SetGadgetText(#RATIO,"Ratio : 4/3")
Case "1.25"
SetGadgetText(#RATIO,"Ratio : 5/4")
Case "1.60"
SetGadgetText(#RATIO,"Ratio : 16/10")
Case "1.78"
SetGadgetText(#RATIO,"Ratio : 16/9")
Default
SetGadgetText(#RATIO,"Ratio : "+StrF(Ratio,2))
EndSelect
Diagonale.f=Val(GetGadgetText(#DIAGONALE))*2.54
hauteur.f=CalculHauteur(Diagonale,Ratio)
largeur.f=hauteur*Ratio
SetGadgetText(#DIMENSIONS,"Largeur x Hauteur : "+StrF(largeur,1)+" x "+StrF(hauteur,1)+" cm")
DotW.f=largeur/Val(StringField(GetGadgetText(#RESOLUTION),1,"x"))*10
DotH.f=hauteur/Val(StringField(GetGadgetText(#RESOLUTION),2,"x"))*10
SetGadgetText(#TAILLEPIXEL,"Taille Pixel : "+StrF(DotW,3)+" x "+StrF(DotH,3)+" mm")
SetGadgetText(#DIAG_CM,"Diagonale : "+Str(Val(GetGadgetText(#DIAGONALE))*2.54)+" cm")
SetGadgetText(#SURFACE,"Surface : "+Str(largeur*hauteur)+" cm²")
If Ref_Surface<>0
;/ Affiche la différence de surface
diff=(largeur*hauteur)/Ref_Surface*100
If diff<100
SetGadgetText(#DIFFERENCE_SURFACE,"Surface : "+Str(diff-100)+"%")
ElseIf diff=100
SetGadgetText(#DIFFERENCE_SURFACE,"Surface : Identique")
ElseIf diff>100
SetGadgetText(#DIFFERENCE_SURFACE,"Surface : +"+Str(diff-100)+"%")
EndIf
;/ Affiche le texte avec comparaison de la taille
SetGadgetFont(#TEXTE_REFERENCE,LoadFont(0,"Arial",10))
TailleDiff.f=DotW/Ref_Pixel*10
SetGadgetFont(#TEXTE_COMPARAISON,LoadFont(1,"Arial",TailleDiff))
EndIf
Else
SetGadgetText(#RATIO,"")
SetGadgetText(#DIMENSIONS,"")
SetGadgetText(#TAILLEPIXEL,"")
SetGadgetText(#DIAG_CM,"")
SetGadgetText(#SURFACE,"")
EndIf
EndProcedure
Procedure Affiche()
ClearGadgetItemList(#RESOLUTION)
ClearGadgetItemList(#MONITEUR)
ClearGadgetItemList(#DIAGONALE)
PreferenceGroup("Définitions")
;/ Diagonale
index=1
Repeat
D.s=StringField(ReadPreferenceString("Diagonale",""),index,",")
Debug D
If D=""
Break
EndIf
index+1
AddGadgetItem(#DIAGONALE,-1,D+Chr(34))
ForEver
;/ Résolution
index=1
Repeat
R.s=StringField(ReadPreferenceString("Résolution",""),index,",")
Debug D
If R=""
Break
EndIf
index+1
AddGadgetItem(#RESOLUTION,-1,R)
ForEver
;/ Moniteurs
ExaminePreferenceGroups()
While NextPreferenceGroup()
If PreferenceGroupName()<>"Définitions"
AddGadgetItem(#MONITEUR,-1,PreferenceGroupName())
EndIf
Wend
Calcul()
EndProcedure
Procedure InitialiseINI()
OpenPreferences(GetPathPart(ProgramFilename())+"dot.ini")
PreferenceGroup("Définitions")
If ReadPreferenceString("Diagonale","")=""
WritePreferenceString("Diagonale","12,15,17,19,20,22,24,28,32")
EndIf
If ReadPreferenceString("Résolution","")=""
WritePreferenceString("Résolution","1024x768,1280x1024,1366x768,1440x900,1680x1050,1920x1200")
EndIf
Affiche()
EndProcedure
;{/ Visuel
#TITRE="Résolution Pixel"
OpenWindow(0,0,0,#LARGEURFENETRE,#HAUTEURFENETRE,#TITRE, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
PanelGadget(#PANEL,10,10,#LARGEURFENETRE-20,#HAUTEURFENETRE-60)
AddGadgetItem(#PANEL,-1,"Définition")
;/ Moniteurs
ComboBoxGadget(#MONITEUR, 10, 10, #LARGEURFENETRE-45,#HAUTEURFENETRE, #PB_ComboBox_Editable)
;/ Taille
ComboBoxGadget(#DIAGONALE, 10, 40, #LARGEURFENETRE-45,#HAUTEURFENETRE, #PB_ComboBox_Editable)
;/ Résolution
ComboBoxGadget(#RESOLUTION, 10, 70, #LARGEURFENETRE-45,#HAUTEURFENETRE, #PB_ComboBox_Editable)
;/ Sortie
TextGadget(#RATIO,10,100,#LARGEURFENETRE-45,20,"")
TextGadget(#DIMENSIONS,10,120,#LARGEURFENETRE-45,20,"")
TextGadget(#TAILLEPIXEL,10,140,#LARGEURFENETRE-45,20,"")
TextGadget(#DIAG_CM,10,160,#LARGEURFENETRE-45,20,"")
TextGadget(#SURFACE,10,180,#LARGEURFENETRE-45,20,"")
;/ 2° Panel
CloseGadgetList()
AddGadgetItem(#PANEL,-1,"Comparaison")
;/ Eléments du 2° Panel
TextGadget(#DIFFERENCE_SURFACE,10,10,#LARGEURFENETRE-45,20,"")
TextGadget(#TEXTE_REFERENCE,10,30,#LARGEURFENETRE-45,20,"Moniteur de référence")
TextGadget(#TEXTE_COMPARAISON,10,80,#LARGEURFENETRE-45,50,"Moniteur de comparaison")
;/ StatusBar
CreateStatusBar(#STATUSB,WindowID(0))
;/ Menu
CreateMenu(#MENU,WindowID(0))
MenuTitle("Moniteur")
MenuItem(#AJOUTE,"Ajouter")
MenuItem(#SUPPRIME,"Supprimer")
MenuBar()
MenuItem(#REFERENCE,"Définir comme référence")
MenuTitle("?")
MenuItem(#ABOUT,"A propos")
;/ Tooltip
GadgetToolTip(#MONITEUR,"Moniteurs définis")
GadgetToolTip(#DIAGONALE,"Diagonale en Pouces")
GadgetToolTip(#RESOLUTION,"Résolution en pixels (Largeur x Hauteur)")
;}
InitialiseINI()
;{/ Gestion des évènements
Repeat
evt=WaitWindowEvent()
Select evt
Case #PB_Event_Gadget
Select EventGadget()
Case #DIAGONALE,#RESOLUTION
Calcul()
Case #MONITEUR
;/ Lit le fichier INI si un moniteur correspond
ExaminePreferenceGroups()
While NextPreferenceGroup()
If PreferenceGroupName()=GetGadgetText(#MONITEUR)
SetGadgetText(#DIAGONALE,ReadPreferenceString("Diagonale",""))
SetGadgetText(#RESOLUTION,ReadPreferenceString("Résolution",""))
Calcul()
EndIf
Wend
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #REFERENCE
If GetGadgetText(#DIAGONALE)<>"" And GetGadgetText(#RESOLUTION)<>""
If GetGadgetText(#MONITEUR)=""
StatusBarText(#STATUSB,0," Référence : "+GetGadgetText(#DIAGONALE)+"@"+GetGadgetText(#RESOLUTION))
Else
StatusBarText(#STATUSB,0," Référence : "+GetGadgetText(#MONITEUR)+" ("+GetGadgetText(#DIAGONALE)+"@"+GetGadgetText(#RESOLUTION)+")")
EndIf
Ratio.f=Val(StringField(GetGadgetText(#RESOLUTION),1,"x"))/Val(StringField(GetGadgetText(#RESOLUTION),2,"x"))
Diagonale.f=Val(GetGadgetText(#DIAGONALE))*2.54
hauteur.f=CalculHauteur(Diagonale,Ratio)
largeur.f=hauteur*Ratio
Ref_Pixel.f=largeur/Val(StringField(GetGadgetText(#RESOLUTION),1,"x"))*10
Ref_Surface=largeur*hauteur
EndIf
Case #AJOUTE
If GetGadgetText(#MONITEUR)<>"" And GetGadgetText(#DIAGONALE)<>"" And GetGadgetText(#RESOLUTION)<>""
PreferenceGroup(GetGadgetText(#MONITEUR))
WritePreferenceString("Diagonale",GetGadgetText(#DIAGONALE))
WritePreferenceString("Résolution",GetGadgetText(#RESOLUTION))
Affiche()
EndIf
Case #SUPPRIME
If GetGadgetText(#MONITEUR)<>""
RemovePreferenceGroup(GetGadgetText(#MONITEUR))
Affiche()
EndIf
Case #ABOUT
MessageRequester(#TITRE,"Programmé en PureBasic")
EndSelect
EndSelect
Until evt= #PB_Event_CloseWindow
;}