tout d'abord voici une capture ecran :
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