Pure_Defisher 4

Programmation d'applications complexes
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Pure_Defisher 4

Message par Zorro »

je repart avec un nouveau topic, tellement cette version est une nouvelle version :)

tout d'abord voici une capture ecran :

Image

comme vous pouvez voir , j'ai ajouté 2 curseurs "Force horizontal" , et "Force vertical"

ça permet de jouer sur les déformations horizontal et Vertical !!
ce qui permet une correction nickel :)

voyez la capture,qui est un tres bon exemple des nouvelles possibilités :)

les curseurs "Effect X" et "effect Y" permettent d'appliquer l'effet plus sur la gauche , la droite, le haut, le bas
ça permet de corriger certains problèmes d’étirement sur la photo ...


j'ai ajouté un mode Batch pour la conversion par lot ..
il est désactivé au premier lancement, il faut effectuer un premier calcul pour activer la possibilité d'un batch
en effet, je vois mal qu'on lance la conversion de pleins de photos sans avoir vérifié au préalable au moins
le résultat d'un calcul sur une des photos , histoire de voir que les paramètres sont bons !! :)

ensuite un clique sur le bouton Batch_convert , vous demandera les photos a selectionner
et ensuite l'endroit ou vous voulez sauver le resultat (un dossier par exemple )

et c'est parti , ça converti .. j'ajouterai un son ou une alerte en fin de traitement :)

je vais refaire une partie des exemples avec cette version de prg pour vous montrer ce que ça donne :)

Ajout de 2 curseurs pour stretcher l'image , c'est en temps reel , ça permet de mieux cadrer les éventuelles petites
imperfections qui peuvent apparaître sur les bords de l'image

ha j'oubliai ... le code :

Code : Tout sélectionner

;***********************************************
;Titre  :*Pure_defisher4
;Auteur  : Dobro
;Date  :28/09/2016
;Heure  :10:13:13
;Version Purebasic :  PureBasic 5.50 (Windows - x86)
;Version Purebasic :  (").PureBasic 5.50 (Windows - x64)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune 
Global Version.s="1.02"
;***********************************************
;48.33
;24.17
;
;19.20
;12.53
;{- Enumerations / DataSections
;{ Windows
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
Enumeration
		#Win
		#file
EndEnumeration
;}
;{ Gadgets
Enumeration
		#Image_0
		#Image_1
		#ScrollBar_Force_x
		#ScrollBar_Force_y
		#ScrollBar_zoom
		#Text_force_x
		#Text_force_x_val
		#Text_force_y
		#Text_force_y_val
		#Text_zoom
		#Text_zoom_val
		#Text_Titre
		#Text_auteur
		#Button_Load
		#Button_Save
		#Button_calcul
		#progress_calcul
		#image_origine
		#image_origine_gadget
		#image_modifie
		#image_modifie_gadget
		#image_modifie2
		#Text_eff_x
		#Text_eff_x_val
		#Text_eff_y
		#Text_eff_y_val
		#Text_version
		#ScrollBar_eff_x
		#ScrollBar_eff_y
		#Button_reset
		#batch_convert
		#Button_Oplympus_small_wide	
		#Text_etirement_x
		#ScrollBar_etirement_x
		#Text_etirement_x_val
		#Text_etirement_y
		#ScrollBar_etirement_y
		#Text_etirement_y_val
EndEnumeration
;}
;{ Fonts
Enumeration
		#Font_Text_Titre
EndEnumeration
;}
;{ Images
Enumeration
		#Image_Image_0
		#Image_Image_1
EndEnumeration
;}
Structure image_file
		image_file.s
		image_file_batch.s
		repertoire_sortie.s
		here.s
		name_image.s
		extens_image.s
		Largeur_image.i
		hauteur_image.i
		pos_curs_force_x.i
		pos_curs_force_y.i
		pos_curs_zoom.d
		etirement_x.d
		etirement_y.d
		eff_x.i
		eff_y.i
		image_modifie_larg.i
		image_modifie_haut.i
EndStructure
Global image_file.image_file
Global Dim Image_or.d(1,1)
Global Dim Image_res.d(1,1)
image_file\pos_curs_zoom.d=1
; **********************************
;-declaration Procedures
Declare openwindow_win()
Declare calcul()
Declare save(flag)
Declare load(flag)
Declare save_ini()
Declare load_ini()
Declare aff_val()

; **********************************
Define.l Event
;}
Load_ini()
OpenWindow_Win()
SetGadgetState(#ScrollBar_Force_x,image_file\pos_curs_force_x)
SetGadgetState(#ScrollBar_Force_y,image_file\pos_curs_force_y)
SetGadgetState(#ScrollBar_zoom,curs.d)
image_file\etirement_x.d =1
image_file\etirement_y.d =1
aff_val()



;{- Event loop
Repeat
		Event = WaitWindowEvent(12)
		Select Event
				; ///////////////////
		Case #PB_Event_Gadget
				Select EventGadget()
				Case #Image_0
				Case #Image_1
				Case #batch_convert
						;-bath_convert
						image_file\image_file_batch.s=OpenFileRequester("choisir Les images a convertir",image_file\here.s,"*.jpg;*.png;*.bmp",1,#PB_Requester_MultiSelection)
						image_file\repertoire_sortie.s=PathRequester("indiquez le repertoire de sortie",image_file\here.s)
						While image_file\image_file_batch.s
								;Debug image_file\image_file_batch.s
								SetWindowTitle(#win,"calcul img:"+image_file\image_file_batch.s)
								image_file\image_file.s=image_file\image_file_batch.s
								;load image en cours
								Load(#true)
								;calcul
								Calcul()
								image_file\image_file_batch.s = NextSelectedFileName()
								save(#True)
						Wend
				Case #scrollbar_eff_x
						;-effet_x
						image_file\eff_x.i= GetGadgetState(#Scrollbar_eff_x)
						aff_val()
				Case #scrollbar_eff_y
						;-effet_y
						image_file\eff_y.i= GetGadgetState(#Scrollbar_eff_y)
						aff_val()
				Case #ScrollBar_Force_x
						;-force_x
						image_file\pos_curs_force_x.i = GetGadgetState(#scrollbar_force_x)
						aff_val()
				Case #ScrollBar_Force_y
						;-force_y
						image_file\pos_curs_force_y.i = GetGadgetState(#scrollbar_force_y)
						aff_val()
				Case #ScrollBar_zoom
						;-zoom						
						curs.d=GetGadgetState(#scrollbar_zoom)
						image_file\pos_curs_zoom.d=curs.d
						if isimage(#image_modifie)								
								image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
								image_file\image_modifie_haut.i=Imageheight(#image_modifie)
								
								ResizeImage(#image_modifie,image_file\image_modifie_larg.i+curs.d,image_file\image_modifie_haut.i+curs.d)
								GrabImage(#image_modifie,#image_modifie2,curs.d,curs.d,image_file\image_modifie_larg.i-curs.d, image_file\image_modifie_haut.i-curs.d)
								CopyImage(#image_modifie2,#image_modifie_gadget)
								ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
								SetGadgetState(#Image_1, imageId(#image_modifie_gadget))
								image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
								image_file\image_modifie_haut.i=Imageheight(#image_modifie)
								SetGadgetState(#ScrollBar_etirement_x,1)
								SetGadgetState(#ScrollBar_etirement_y,1)
						endif
						
						aff_val()
				Case #ScrollBar_etirement_x
						
						image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
						image_file\image_modifie_haut.i=Imageheight(#image_modifie)
						
						image_file\etirement_x.d=GetGadgetState(#scrollbar_etirement_x)
						cursx.d= image_file\etirement_x.d
						if isimage(#image_modifie)
								
								ResizeImage(#image_modifie,image_file\image_modifie_larg.i+cursx.d, #pb_ignore)
								GrabImage(#image_modifie,#image_modifie2,cursx.d,cursy.d,image_file\image_modifie_larg.i-cursx.d, image_file\image_modifie_haut.i-cursy.d)
								CopyImage(#image_modifie2,#image_modifie_gadget)
								ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
								SetGadgetState(#Image_1, imageId(#image_modifie_gadget))				
								image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
								image_file\image_modifie_haut.i=Imageheight(#image_modifie)
								
								SetGadgetState(#ScrollBar_zoom,1)
						endif
						
				Case #ScrollBar_etirement_y
						image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
						image_file\image_modifie_haut.i=Imageheight(#image_modifie)
						image_file\etirement_y.d=GetGadgetState(#scrollbar_etirement_y)
						cursy.d= image_file\etirement_y.d
						if isimage(#image_modifie)
								
								ResizeImage(#image_modifie, #pb_ignore, image_file\image_modifie_haut.i+cursy.d)
								GrabImage(#image_modifie,#image_modifie2,cursx.d,cursy.d,image_file\image_modifie_larg.i-cursx.d, image_file\image_modifie_haut.i-cursy.d)
								CopyImage(#image_modifie2,#image_modifie_gadget)
								ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
								SetGadgetState(#Image_1, imageId(#image_modifie_gadget))											
								
								image_file\image_modifie_larg.i=ImageWidth(#image_modifie)
								image_file\image_modifie_haut.i=Imageheight(#image_modifie)
								SetGadgetState(#ScrollBar_zoom,1)
						endif
				Case #Text_force_x
				Case #Text_Force_y
						
				Case #Text_Titre
				Case #Text_auteur
				Case #Button_reset
						;-reset
						
						SetGadgetState(#ScrollBar_Force_x,10000/2)
						SetGadgetState(#ScrollBar_Force_y,10000/2)
						
						SetGadgetState(#Scrollbar_eff_x,image_file\Largeur_image/2)
						SetGadgetState(#ScrollBar_eff_y,image_file\Hauteur_image/2)
						image_file\eff_x.i=GetGadgetState(#Scrollbar_eff_x)
						image_file\eff_y.i=GetGadgetState(#Scrollbar_eff_y)
						image_file\pos_curs_force_x.i=GetGadgetState(#Scrollbar_eff_x)
						image_file\pos_curs_force_y.i=GetGadgetState(#Scrollbar_eff_y)
						aff_val()
				Case #Button_Load
						;-load
						Load(#false)
				Case #Button_Save
						;-Save
						save(#false)
				Case #Button_calcul
						;-calcul
						Calcul()
				Case #Button_Oplympus_small_wide
						; Tg-Tracker
						;48.33
						;24.17
						;
						;19.20
						;12.53
						;(3840x2160)
						
						
						
						image_file\pos_curs_force_x.i=4833
						image_file\pos_curs_force_y.i=2417
						ecx.d=3840/1920
						ecy.d=2160/1253
						image_file\eff_x.i=image_file\largeur_image.i/ecx.d
						image_file\eff_y.i=image_file\hauteur_image.i/ecy.d
						SetGadgetState(#ScrollBar_Force_x,image_file\pos_curs_force_x.i)
						SetGadgetState(#ScrollBar_Force_y,image_file\pos_curs_force_y.i)						
						SetGadgetState(#Scrollbar_eff_x,image_file\eff_x.i)
						SetGadgetState(#ScrollBar_eff_y,image_file\eff_y.i)
						aff_val()
						
						
						
				EndSelect
				; ////////////////////////
		Case #PB_Event_CloseWindow
				Select EventWindow()
				Case #Win
						Save_ini()
						CloseWindow(#Win)
						Break
				EndSelect
		EndSelect
Forever
;
;}
;- Procedures Zone
Procedure OpenWindow_Win()
		If OpenWindow(#Win, 271, 98, 886, 550, "Pure_defisher by Dobro", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
				;;If CreateGadgetList(WindowID(#Win))
				ImageGadget(#Image_0, 430, 10, 325, 235, 0, #PB_Image_Border)
				ImageGadget(#Image_1, 430, 270, 325, 235, 0, #PB_Image_Border)
				TextGadget(#Text_force_x, 20, 80, 100, 20, "Force Horizontal")
				ScrollBarGadget(#ScrollBar_Force_x, 150, 80, 200, 15, 1, 10000, 1000)
				TextGadget(#Text_force_x_val, 360, 80, 50, 20, "0")
				TextGadget(#Text_force_y, 20, 100, 100, 20, "Force Vertical")
				ScrollBarGadget(#ScrollBar_Force_y, 150, 100, 200, 15, 1, 10000, 1000)
				TextGadget(#Text_force_y_val, 360, 100, 50, 20, "0")
				TextGadget(#Text_zoom, 20, 120, 100, 20, "Zoom")
				ScrollBarGadget(#ScrollBar_zoom, 150, 120, 200, 15, 1, 300, 10)
				TextGadget(#Text_zoom_val, 360, 120, 50, 20, "0")
				TextGadget(#Text_eff_x, 20, 140, 100, 20, "effect x")
				ScrollBarGadget(#ScrollBar_eff_x, 150,140, 200, 15, 1, 30, 10)
				TextGadget(#Text_eff_x_val, 360, 140, 50, 20, "0")
				TextGadget(#Text_eff_y, 20, 160, 100, 20, "effect y")
				ScrollBarGadget(#ScrollBar_eff_y, 150, 160, 200, 15, 1, 30, 10)
				TextGadget(#Text_eff_y_val, 360, 160, 50, 20, "0")
				
				TextGadget(#Text_etirement_x, 20, 180, 100, 20, "stretch x")
				ScrollBarGadget(#ScrollBar_etirement_x, 150, 180, 200, 15, 1, 300, 10)
				TextGadget(#Text_etirement_x_val, 360, 180, 50, 20, "0")
				;
				TextGadget(#Text_etirement_y, 20, 200, 100, 20, "stretch y")
				ScrollBarGadget(#ScrollBar_etirement_y, 150,200, 200, 15, 1,300, 10)
				TextGadget(#Text_etirement_y_val, 360, 200, 50, 20, "0")
				
				
				
				ButtonGadget(#Button_reset, 20, 230, 100, 25, "reset")
				ButtonGadget(#Button_Oplympus_small_wide, 20, 260, 100, 25, "TG-tracker")
				
				
				TextGadget(#Text_Titre, 100, 15, 180, 40, "Pure_Defisher")
				TextGadget(#Text_version, 300, 15, 50, 40,Version.s )
				TextGadget(#Text_auteur, 245, 55, 50, 20, "By Dobro")
				ButtonGadget(#Button_calcul, 10, 375, 55, 50, "Calcul")
				ProgressBarGadget(#progress_calcul, 70, 375+35,150, 15, 1, 100)
				ButtonGadget(#Button_Load, 10, 440, 80, 25, "Load")
				ButtonGadget(#Button_Save, 10, 470, 80, 25, "Save")
				ButtonGadget(#batch_convert,130, 470, 80, 25, "Batch_convert")
				
				DisableGadget(#batch_convert, #true)
				; Gadget Fonts
				SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Arial", 20, #PB_Font_HighQuality))
				;EndIf
		EndIf
EndProcedure
Procedure Calcul()
		Save_ini()
		if IsImage(#image_origine)
				; defisher
				halfWidth.d=image_file\Largeur_image-GetGadgetState(#scrollbar_eff_x);image_file\Largeur_image/2
				halfHeight.d=GetGadgetState(#scrollbar_eff_y);image_file\hauteur_image/2
				strength_x.d=GetGadgetState(#ScrollBar_Force_x)/1000
				strength_y.d=GetGadgetState(#ScrollBar_Force_y)/1000
				
				if strength_x.d = 0 : strength_x.d = 0.00001:Endif
				if strength_y.d = 0 : strength_y.d = 0.00001:Endif
				correctionRadius_x.d =(pow(image_file\Largeur_image , 2) +pow(image_file\hauteur_image , 2)) / strength_x.d
				correctionRadius_y.d =(pow(image_file\Largeur_image , 2) +pow(image_file\hauteur_image , 2)) / strength_y.d
				; ***************************************************
				CreateImage(#image_modifie, image_file\Largeur_image,image_file\hauteur_image)
				StartDrawing(ImageOutput(#image_modifie))
						For x=1 to image_file\Largeur_image-1
								For y=1 to image_file\hauteur_image-1
										newX.d = x - halfWidth.d  ;v
										newY.d = y - halfHeight.d ; h
										
										distance.d = pow(newX.d ,2) +pow( newY.d ,2)
										r_x.d = (distance.d / correctionRadius_x.d)
										r_y.d = (distance.d / correctionRadius_y.d)
										if r_x.d <> 0 or r_y.d<>0
												;(TAN arrondis /// Atan creuse )
												theta_x.d=ATAN(r_x.d )/r_x.d
												theta_y.d=ATAN(r_y.d )/r_y.d
												
												
												
												sourceX = halfWidth.d + (theta_x.d *( newX.d ) )
												sourceY = halfHeight.d + ((theta_y.d ) *( newY.d) )
												if (sourceX>1 and  sourceY>1) and (sourceX<image_file\largeur_image and sourceY<image_file\hauteur_image)
														plot (x,y,Image_or(sourceX,sourceY))
												Endif
										Endif
								Next y
								SetGadgetState(#progress_calcul, x)
								; UpdateWindow_(GadgetID(#progress_calcul))
								WaitWindowEvent(2)
						Next x
				StopDrawing()
				; ***************************************************
				
				curs.d=GetGadgetState(#scrollbar_zoom)
				ResizeImage(#image_modifie,image_file\Largeur_image+curs.d, image_file\hauteur_image+curs.d)
				GrabImage(#image_modifie,#image_modifie2,curs.d,curs.d,image_file\Largeur_image-curs.d, image_file\hauteur_image-curs.d)
				CopyImage(#image_modifie2,#image_modifie_gadget)
				ResizeImage(#image_modifie_gadget,325,235)
				SetGadgetState(#Image_1, imageId(#image_modifie_gadget))
				SetGadgetState(#progress_calcul, 0)
				UpdateWindow_(GadgetID(#Image_1))
				UpdateWindow_(GadgetID(#progress_calcul))
				DisableGadget(#batch_convert, #False)
		Endif
Endprocedure
Procedure Save(flag)
		CopyImage(#image_modifie2,#image_modifie)
		FreeImage(#image_modifie2)
		if flag=#false
				path_save.s=SaveFileRequester("ou sauver ?" ,image_file\here.s+image_file\name_image.s+"."+image_file\extens_image.s,"*.jpg;*.png;*.bmp",1)
		Else
				path_save.s=image_file\repertoire_sortie.s+image_file\name_image.s+"."+image_file\extens_image.s
		Endif
		select LCase(image_file\extens_image.s)
				Case "jpg"
						SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_JPEG,10)
				case "bmp"
						SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_BMP)
				case "png"
						SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_PNG)
				EndSelect
		Endprocedure
		Procedure Load(flag)
				
				load_ini()
				if flag=#false
						image_file\image_file.s=OpenFileRequester("choisir une image",image_file\here.s,"*.jpg;*.png;*.bmp",1)
				Endif
				if  image_file\image_file.s<>""
						image_file\here.s=GetPathPart( image_file\image_file.s)
						image_file\name_image.s=GetFilePart( image_file\image_file.s,#PB_FileSystem_NoExtension)
						image_file\extens_image.s=GetExtensionPart( image_file\image_file.s)
						If LoadImage(#image_origine, image_file\image_file.s)
								image_file\Largeur_image=ImageWidth(#image_origine)
								image_file\hauteur_image=ImageHeight(#image_origine)
								CopyImage(#image_origine,#image_origine_gadget)
								ResizeImage(#image_origine_gadget,325,235)
								SetGadgetState(#Image_0, imageId(#image_origine_gadget))
								SetGadgetAttribute(#progress_calcul, #PB_ProgressBar_Maximum, image_file\hauteur_image)
								SetGadgetAttribute(#scrollbar_eff_x,#PB_ScrollBar_Maximum   , image_file\Largeur_image)
								SetGadgetAttribute(#scrollbar_eff_y,#PB_ScrollBar_Maximum   , image_file\Hauteur_image)
								SetGadgetState(#Scrollbar_eff_x,image_file\eff_x)
								SetGadgetState(#ScrollBar_eff_y,image_file\eff_y)
								
								SetGadgetState(#ScrollBar_Force_x,image_file\pos_curs_force_x.i )
								SetGadgetState(#ScrollBar_Force_y,image_file\pos_curs_force_y.i )
								
								SetGadgetAttribute(#scrollbar_etirement_x,#PB_ScrollBar_Maximum   ,image_file\Largeur_image/10)
								SetGadgetAttribute(#scrollbar_etirement_y,#PB_ScrollBar_Maximum   ,image_file\hauteur_image/10)
								
								
								
								;
								Dim Image_or.d(image_file\Largeur_image,image_file\hauteur_image)
								Dim Image_res.d(image_file\Largeur_image,image_file\hauteur_image)
								; Scan
								StartDrawing(ImageOutput(#image_origine))
										For y=1 to image_file\hauteur_image-1
												For x=1 to image_file\Largeur_image-1
														Image_or(x,y)=point(x,y)
												Next x
										Next y
								StopDrawing()
						Else
								MessageRequester("erreur", "pas pu charger cette image !")
						Endif
				Endif
		EndProcedure
		procedure Save_ini()
				If Openfile(#file,GetCurrentDirectory()+"Pure_defisher.ini")
								;-save_ini
								writeStringN(#file,image_file\here.s)
								WriteInteger(#file,GetGadgetState(#ScrollBar_Force_x))
								WriteInteger(#file,GetGadgetState(#ScrollBar_Force_y))
								WriteFloat(#file,image_file\pos_curs_zoom.d)
								WriteInteger(#file,image_file\eff_x.i)
								WriteInteger(#file,image_file\eff_y.i)
						CloseFile(#file)
				Else
						image_file\here.s=GetCurrentDirectory()
Endif;]
EndProcedure
Procedure load_ini()
		if FileSize(GetCurrentDirectory()+"Pure_defisher.ini")>1
				If Openfile(#file,GetCurrentDirectory()+"Pure_defisher.ini")
								image_file\here.s=ReadString(#file)
								image_file\pos_curs_force_x=ReadInteger(#file)
								image_file\pos_curs_force_y=ReadInteger(#file)
								curs.d=ReadFloat(#file)
								image_file\pos_curs_zoom.d=curs.d
								image_file\eff_x.i=ReadInteger(#file)
								image_file\eff_y.i=ReadInteger(#file)
						CloseFile(#file)
						
				Endif
		Else
		image_file\here.s=GetCurrentDirectory();|
		Endif
EndProcedure
Procedure aff_val()
		SetGadgettext(#Text_force_x_val,StrF(image_file\pos_curs_force_x/100,2))
		SetGadgettext(#Text_force_y_val,StrF(image_file\pos_curs_force_y/100,2))
		SetGadgettext(#text_zoom_val,str(image_file\pos_curs_zoom.d))
		SetGadgettext(#text_eff_x_val,strF(image_file\eff_x.i/100,2 ))
		SetGadgettext(#text_eff_y_val,strF(image_file\eff_y.i/100 ,2))
Endprocedure
;Epb

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"