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 :mrgreen:

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 :mrgreen: , c'est ma frangine :twisted: )

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)
Image
Image

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.

Image

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 :mrgreen:

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 :mrgreen: