Page 2 sur 3
Re: Crop Crop ! Pour recadrer vos photos !
Publié : jeu. 04/oct./2012 17:26
par Ar-S
Je viens de mettre à jour le programme.
J'ai testé avec 4 situations :
- 1 Image plus large que l'ecran
- 1 Image plus haute que l'ecran
- 1 Image plus large et haute que l'ecran
- 1 image moins haute et large que l'ecran
Tout à marché.
En espérant LSI que le soucis ne viennent pas du dual screen.
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 8:51
par Le Soldat Inconnu
Pourquoi tu n'utilises pas la fonction Desktop de PB ?
Parce que la, ça redimensionne suivant la taille de l'écran secondaire.
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 9:56
par Ar-S
Je viens de modifier en conséquence.
Je pensais que GetSystemMetrics_(0) retournerait par défaut la largeur de l'écran principal.
Si tu peux re-tester (archive ré-uppée). Tout devrait passer maintenant.
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 10:16
par Le Soldat Inconnu
Tiens mon grand
C'est pas encore super parfait mais c'est déjà pas mal, et ça marche en multi-écran
Code : Tout sélectionner
UseJPEGImageDecoder()
UsePNGImageDecoder()
Enumeration
#Ouvrir = 0
#Fermer
#Quitter
#FenetreAjustementAuto
#Image = 0
#ImageAjuster
EndEnumeration
Procedure ReduireImage(Ecran_X, Ecran_Y)
CopyImage(#Image, #ImageAjuster)
If ImageHeight(#Image) > Ecran_Y Or ImageWidth(#Image) > Ecran_X
If Ecran_X * ImageHeight(#Image) <= ImageWidth(#Image) * Ecran_Y
ResizeImage(#ImageAjuster, Ecran_X, ImageHeight(#Image) * Ecran_X / ImageWidth(#Image), #PB_Image_Smooth)
Else
ResizeImage(#ImageAjuster, ImageWidth(#Image) * Ecran_Y / ImageHeight(#Image), Ecran_Y, #PB_Image_Smooth)
EndIf
EndIf
EndProcedure
Procedure ChangementDimension()
Protected Ecran_Quantite, Fenetre.rect, Fenetre_Bordure_H, Fenetre_Bordure_L, Fenetre_Centre_X, Fenetre_Centre_Y, Fenetre_H, Fenetre_L
; Dimension de la fenêtre
GetWindowRect_(WindowID(0), Fenetre.rect)
Fenetre_Centre_X = Fenetre\left + (Fenetre\right - Fenetre\left) / 2
Fenetre_Centre_Y = Fenetre\top + (Fenetre\bottom - Fenetre\top) / 2
Fenetre_H = WindowHeight(0) - MenuHeight() - StatusBarHeight(0)
Fenetre_L = WindowWidth(0)
Fenetre_Bordure_H = (Fenetre\bottom - Fenetre\top) - Fenetre_H
Fenetre_Bordure_L = (Fenetre\right - Fenetre\left) - Fenetre_L
; Position de la fenêtre
Ecran_Quantite = ExamineDesktops()
Ecran_Cible = 0
For Ecran = 0 To Ecran_Quantite - 1
If Fenetre_Centre_X >= DesktopX(Ecran) And Fenetre_Centre_X < DesktopX(0) + DesktopWidth(0) And Fenetre_Centre_Y >= DesktopY(Ecran) And Fenetre_Centre_Y < DesktopY(0) + DesktopHeight(0)
Ecran_Cible = Ecran
EndIf
Next
If IsImage(#Image)
Image_H = ImageHeight(#Image)
Image_L = ImageWidth(#Image)
If Image_H < 40
Image_H = 40
EndIf
If Image_L < 300
Image_L= 300
EndIf
Else
Image_H = 40
Image_L = 300
EndIf
; Détermine si il faut maximiser la fenêtre
If Image_L + 128 >= DesktopWidth(Ecran_Cible) - Fenetre_Bordure_L Or Image_H + 128 >= DesktopHeight(Ecran_Cible) - Fenetre_Bordure_H
If GetWindowState(0) <> #PB_Window_Maximize
SetWindowState(0, #PB_Window_Maximize)
ChangementDimension()
ProcedureReturn
EndIf
Else
If GetWindowState(0) = #PB_Window_Maximize
SetWindowState(0, #PB_Window_Normal)
ChangementDimension()
ProcedureReturn
EndIf
EndIf
If GetWindowState(0) = #PB_Window_Normal
x = WindowX(0) + (Fenetre_L - Image_L) / 2
y = WindowY(0) + (Fenetre_H - Image_H) / 2
If x < DesktopX(Ecran_Cible)
x = DesktopX(Ecran_Cible)
EndIf
If y < DesktopY(Ecran_Cible)
y = DesktopY(Ecran_Cible)
EndIf
ResizeWindow(0, x, y, Image_L, Image_H + MenuHeight() + StatusBarHeight(0))
EndIf
EndProcedure
Procedure Dimension()
Protected Fenetre_H, Fenetre_L
; Dimension de la fenêtre
Fenetre_H = WindowHeight(0) - MenuHeight() - StatusBarHeight(0)
Fenetre_L = WindowWidth(0)
If IsImage(#Image)
ReduireImage(Fenetre_L, Fenetre_H)
If IsGadget(#Image) = 0
ImageGadget(#Image, (Fenetre_L - ImageWidth(#ImageAjuster)) / 2, (Fenetre_H - ImageHeight(#ImageAjuster)) / 2, ImageWidth(#ImageAjuster), ImageHeight(#ImageAjuster), ImageID(#ImageAjuster))
Else
ResizeGadget(#Image, (Fenetre_L - ImageWidth(#ImageAjuster)) / 2, (Fenetre_H - ImageHeight(#ImageAjuster)) / 2, ImageWidth(#ImageAjuster), ImageHeight(#ImageAjuster))
SetGadgetState(#Image, ImageID(#ImageAjuster))
EndIf
EndIf
EndProcedure
Procedure Image_Fermer(OuvertureImage = 0)
If IsImage(#Image)
If IsGadget(#Image)
FreeGadget(#Image)
EndIf
FreeImage(#Image)
If IsImage(#ImageAjuster)
FreeImage(#ImageAjuster)
EndIf
EndIf
If OuvertureImage = 0
ChangementDimension()
Dimension()
StatusBarText(0, 1, "", #PB_StatusBar_Center)
StatusBarText(0, 0, "")
EndIf
EndProcedure
Procedure Image_Ouvrir()
Protected Image.i, Image_Fichier.s
Image_Fichier = OpenFileRequester("Image", "", "Image BMP, JPG, PNG|*.bmp;*.jpg;*.png|Tous les fichiers|*.*", 0)
If Image_Fichier
If FileSize(Image_Fichier) >= 0
Image = LoadImage(#PB_Any, Image_Fichier)
If Image
Image_Fermer(1)
CopyImage(Image, #Image)
FreeImage(Image)
ChangementDimension()
Dimension()
StatusBarText(0, 1, Str(ImageWidth(#Image)) + " x " + Str(ImageWidth(#Image)), #PB_StatusBar_Center)
StatusBarText(0, 0, GetFilePart(Image_Fichier))
Else
MessageRequester("Image", "Le format du fichier n'est pas reconnu")
EndIf
Else
MessageRequester("Image", "Le fichier est introuvable")
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 300, 40, "Ouvrir une image", #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu) = 0
End
EndIf
If CreateMenu(0, WindowID(0))
MenuTitle("Programme")
MenuItem(#Quitter, "Quitter")
MenuTitle("Image")
MenuItem(#Ouvrir, "Ouvrir")
MenuItem(#Fermer, "Fermer")
MenuTitle("Fenêtre")
MenuItem(#FenetreAjustementAuto, "Ajustement automatique de la fenêtre à l'image")
Else
End
EndIf
If CreateStatusBar(0, WindowID(0))
AddStatusBarField(#PB_Ignore)
AddStatusBarField(160)
Else
End
EndIf
WindowBounds(0, 300, 40 + MenuHeight() + StatusBarHeight(0), #PB_Ignore, #PB_Ignore)
ChangementDimension()
Dimension()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SizeWindow
Dimension()
Case #PB_Event_Menu
Select EventMenu()
Case #Ouvrir
Image_Ouvrir()
Case #Fermer
Image_Fermer()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 10:25
par Le Soldat Inconnu
Sinon, j'ai retesté. Et toujours pas, l'image est mal ajustée
avec une image carré plus grande que l'écran, elle est réduite à 2/3 de la hauteur de l'écran en gros
avec une image de la taille de l'écran, ça recouvre la barre des tâches et je ne vois plus la StatusBar()
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 11:19
par Ar-S
le truc de fou c'est que chez moi ça fonctionne dans TOUS les cas !
- 1 Image plus large et moins haute que l'ecran
- 1 Image plus haute et moins large que l'ecran
- 1 Image plus large et plus haute que l'ecran
- 1 image moins haute et moins large que l'ecran
Tu veux jeter un oeil au code (via MP)? j'aimerai trouver d'ou vient ce bug dans mon code. surtout que je n'arrive pas à le reproduire.
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 11:48
par Backup
Le Soldat Inconnu a écrit :Sinon, j'ai retesté. Et toujours pas, l'image est mal ajustée
avec une image carré plus grande que l'écran, elle est réduite à 2/3 de la hauteur de l'écran en gros
avec une image de la taille de l'écran, ça recouvre la barre des tâches et je ne vois plus la StatusBar()
sur Seven , il y a une option a virer ... celle qui remet les fenetres au centre de l'ecran , si on cherche a la faire dépasser sur le haut de l'ecran ..etc ..
je sais plus ou c'est ... mais le probleme viens peut etre de là ... ?
[Reedit]
voir ici :
http://www.windows-seven.org/2009/04/wi ... ement.html
Panneau de configuration > Options d’ergonomie > Rendre la souris plus facile à utiliser > Empêcher les fenêtres d’être automatiquement réorganisées lorsqu’elles sont déplacées au bord de l’écran.
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 12:23
par Ar-S
@dobro, cette option est activée (et très pratique) chez moi et j'ai pas de problème.
Ci joint une archive avec mes 4 images tests : (je suis en 1680x1050)
http://stock.ldvmultimedia.com/testpics.zip
Re: Crop Crop ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 13:04
par Ar-S
Mise à jour.
Remplacement des Buttongadget par des Canvas pour une meilleur lisibilité.
(c'est vrai que la canvas c'est de la bombe).
(P.S : G-rom pas d'allusion salace sur la nénette tu seras brave

, c'est ma frangine

)
Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 13:18
par Le Soldat Inconnu
envoi ton code, je veux bien regarder (mais peut-être que lundi)
Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 13:25
par Le Soldat Inconnu
ça me fais ça : (une image de la même taille que l'écran, l'autre plus grande)

Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 13:33
par Ar-S
Peux tu m'envoyer l'image de la fifille que je teste.
Je testerai dans l'aprem, je pars chez une cliente.
Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 16:54
par Ar-S
Bon j'ai essayé ton image
ça passe nikel, je ne comprends pourquoi chez toi ça pine.

Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : ven. 05/oct./2012 18:39
par Backup
Ar-S a écrit :Bon j'ai essayé ton image
ça passe nikel, je ne comprends pourquoi chez toi ça pine.
il a un ordi chinois

Re: Crop Crop 1.02 ! Pour recadrer vos photos !
Publié : lun. 08/oct./2012 9:51
par Le Soldat Inconnu
Parce que le tiens n'est pas fabriqué en chine ? t'en as un œil
