Je viens de voir que l'image est resize a nouveau a l'enregistrement....
Mais ducoup le resultat final est quand meme déformé (par exemple j'ai une image beaucoup plus large que haute, au final on voit clairement qu'elle a été reduite en largeur puis re-agrandie)
Il faudrait soit travailler sur des dimension fixe : dans ce cas resize de l'image au chargement en tenant compte du ratio, travail sur dimension fixe, sauvegarde au dimensions fixe. soit travailler sur les dimensions d'origine : dans ce cas on garde les dimensions au chargement de l'image, travail sur dimension originales, sauvegarde au dimensions originales.
En me basant sur la premiere option (avec mon code pour le chargement, et en commentant le resize a la sauvegarde), et en ayant modifier un peut mon style j'obtient ça (Je n'ai pas chercher la compatibilité avec le mode peinture a la main, le style n'etant vraiment pas fait pour ça...) :
Les photos de l'audi font un peut fouilli... Encore de l'equilibrage a faire!
Code : Tout sélectionner
Procedure cederavic(Largeur,Hauteur,Array image_tab(2))
;-le Style Cederavic
; by Cederavic
; NE PAS PRENDRE CE STYLE COMME MODEL !!!!
; Sa structure empeche l'utilisation en dessin a main levée !!!
;{ ***************** NE PAS TOUCHER *********************************************************
If state_case=#PB_Checkbox_Checked ; semi mode automatique
nombre_de_coup_de_pinceau=Val(GetGadgetText(#Gadget_nb_de_coup_de_peint))
Taille_x=Val(GetGadgetText(#Gadget_taille_x))
Taille_y=Val(GetGadgetText(#Gadget_taille_y))
If Taille_x<=0:Taille_x=1:EndIf :If Taille_x>=largeur:Taille_x=1023:EndIf
If Taille_y<=0:Taille_y=1:EndIf ::If Taille_y>=Hauteur:Taille_y=767:EndIf
Transparence=Val(GetGadgetText(#Gadget_transparence))
Phase=Random(3,2)
annule()
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, 1000,Transparence , image_tab())
SetGadgetText(#Gadget_text, "Terminé !")
ProcedureReturn
EndIf
annule()
;} *********************************************************************************************
; ici libre :
Phase=1
nombre_de_coup_de_pinceau=200
SetGadgetText(#Gadget_text, "Phase 1/4")
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,128,32, 20, Transparence ,image_tab())
Beep_(440,50)
Phase=2
nombre_de_coup_de_pinceau=2000
SetGadgetText(#Gadget_text, "Phase 2/4")
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,24,128, 20,Transparence , image_tab())
Beep_(440,50)
Phase=3
nombre_de_coup_de_pinceau=32000
SetGadgetText(#Gadget_text, "Phase 3/4")
peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,4,64, 20, Transparence ,image_tab())
Beep_(440,50)
Phase=4
nombre_de_coup_de_pinceau=1
SetGadgetText(#Gadget_text, "Phase 4/4")
peint_cederavicEdge(largeur,Hauteur,nombre_de_coup_de_pinceau, 1, #False, 2000, Transparence ,image_tab())
Beep_(880,100)
EndProcedure
Procedure.d boundMinMax(value.d, min.d, max.d)
If value < min : value = min : EndIf
If value > max : value = max : EndIf
ProcedureReturn value
EndProcedure
Procedure getLuminance(color)
red.d = Red(color) * 0.30
green.d = Green(color) * 0.59
blue.d = Blue(color) * 0.11
ProcedureReturn red + green + blue;
EndProcedure
Procedure getEdgeGray(x, y, Array image_tab(2), alternate = #False)
xB = boundMinMax(x, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
c_up = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
c_down = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y, 0, 768)
c_left = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y, 0, 768)
c_right = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
c_upLeft = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y - 1, 0, 768)
c_upRight = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x - 1, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
c_downLeft = getLuminance(image_tab(xB, yB))
xB = boundMinMax(x + 1, 0, 1024) : yB = boundMinMax(y + 1, 0, 768)
c_downRight = getLuminance(image_tab(xB, yB))
deltaX.d = (c_upRight + (c_right * 2) + c_downRight) - (c_upLeft + (c_left * 2) + c_downLeft)
deltaY.d = (c_upLeft + (c_up * 2) + c_upRight) - (c_downLeft + (c_down * 2) + c_downRight)
If alternate = #True
gray = Abs(deltaX) + Abs(deltaY)
Else
gray = Sqr(deltaX * deltaX + deltaY * deltaY)
EndIf
gray = boundMinMax(gray, 0, 255)
alpha = gray / 12
gray = 24 * (gray / 255)
ProcedureReturn RGBA(gray, gray, gray, alpha)
EndProcedure
Procedure processEvents(delay_affichage, max)
Static progress
progress + 1
If progress >= max : progress = 0 : EndIf
If progress % delay_affichage = 0
StopDrawing()
progressBar.d = (progress / max) * 100
SetGadgetState(#Gadget_scroll, progressBar)
event = WindowEvent()
While event
event = WindowEvent()
If event = #PB_Event_Gadget And EventGadget() = #Gadget_annul
StopDrawing()
ProcedureReturn #False
EndIf
Wend
StartDrawing(CanvasOutput(#canvas))
EndIf
ProcedureReturn #True
EndProcedure
Procedure peint_cederavicEdge(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Transparence ,Array image_tab(2)) ; le pinceau Cederavic
SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Minimum, 0)
SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, 100)
SetGadgetState (#Gadget_scroll, 0)
StartDrawing(CanvasOutput(#canvas))
For x = 0 To largeur
For y = 0 To hauteur
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(x, y, Taille_x, getEdgeGray(x, y, image_tab(), Taille_y))
If processEvents(delay_affichage, largeur * Hauteur) = #False : ProcedureReturn : EndIf
Next
Next
StopDrawing()
EndProcedure
Procedure peint_cederavic(largeur,Hauteur,nombre_de_coup_de_pinceau,Taille_x,Taille_y, delay_affichage, Transparence ,Array image_tab(2)) ; le pinceau Cederavic
;-le pinceau Cederavic
; By Cederavic
; NE PAS PRENRE CE PINCEAU COMME EXEMPLE DE CONSTUCTION DE PINCEAU
SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Minimum, 0)
SetGadgetAttribute(#Gadget_scroll, #PB_ProgressBar_Maximum, 100)
SetGadgetState (#Gadget_scroll, 0)
StartDrawing(CanvasOutput(#Canvas))
For i=1 To nombre_de_coup_de_pinceau
If Phase <> 3
DrawingMode(#PB_2DDrawing_Default)
Else
DrawingMode(#PB_2DDrawing_AlphaBlend)
EndIf
; ************* ne pas toucher ***************************************
If flag_bouton_on=0
x_source=Random(largeur-1) ; lit une couleur de l'image d'origine
y_source=Random(hauteur-1)
Else ; mode Dessin main
x_source=xx_mouse
y_source=yy_mouse
EndIf
If x_source<0 :x_source=1:EndIf
If x_source>1023 :x_source=1023:EndIf
If y_source<0 :y_source=1:EndIf
If y_source>767 :y_source=767:EndIf
; ****************************************************************
maxRange.d = (1 - i / nombre_de_coup_de_pinceau) * Taille_y
If size < 2 : size = 2 : EndIf
angle.d = Random((#PI * 2) * 1000) / 1000
angleDep.d = Random((#PI * 2) * 1000) / 100000 - ((#PI * 1000) / 100000)
angleAdd.d = 0
color = image_tab(x_source,y_source) ; recup la Couleur
For iRange = 1 To maxRange
angleAdd + angleDep
xC = x_source + Cos(angle + angleAdd) * iRange
yC = y_source + Sin(angle + angleAdd) * iRange
If xC >= 0 And xC <= largeur And yC >= 0 And yC <= Hauteur
cS.d = (1 - iRange / maxRange) * Taille_x
If cS < 1.6 : cS = 1.6 : EndIf
cA.d = (1 - iRange / maxRange) * 32
If cA < 1 : cA = 1 : EndIf
r.d = Red(color) * 0.7 + Red(image_tab(xC, yC)) * 0.3
g.d = Green(color) * 0.7 + Green(image_tab(xC, yC)) * 0.3
b.d = Blue(color) * 0.7 + Blue(image_tab(xC, yC)) * 0.3
Circle(xC, yC, cS, RGBA(r, g, b, cA))
EndIf
Next
If processEvents(delay_affichage, nombre_de_coup_de_pinceau) = #False : ProcedureReturn : EndIf
Next i
StopDrawing()
EndProcedure