[resolu] Canvas - encore du mal
Publié : ven. 28/sept./2012 15:32
Yop,
Je suis en train de faire un petit recadreur d'image. Le Canvas semble être la meilleur solution vu la gestion avancée des event.
Mais j'avoue que je suis perdu (ma monstrueuse crève n'aide pas). Voilà mon interface dans sa version de base. Je n'arrive déjà pas à récupérer la position de la souris au clique (#PB_EventType_LeftButtonDown) puis cette même position au relâchement de la souris (#PB_EventType_LeftButtonUp).
J'aimerai en plus apercevoir un cadre de sélection comme semble le permettre le flag #PB_Canvas_DrawFocus.
Bref, besoin des lumières des habitués du canvas.
D'avance merci.
Je suis en train de faire un petit recadreur d'image. Le Canvas semble être la meilleur solution vu la gestion avancée des event.
Mais j'avoue que je suis perdu (ma monstrueuse crève n'aide pas). Voilà mon interface dans sa version de base. Je n'arrive déjà pas à récupérer la position de la souris au clique (#PB_EventType_LeftButtonDown) puis cette même position au relâchement de la souris (#PB_EventType_LeftButtonUp).
J'aimerai en plus apercevoir un cadre de sélection comme semble le permettre le flag #PB_Canvas_DrawFocus.
Bref, besoin des lumières des habitués du canvas.
D'avance merci.
Code : Tout sélectionner
;{- Enumerations / DataSections
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
Enumeration
#LDVM
#ORI_X
#ORI_Y
#TXT_L_ORI
#Text_3
#CHARGER
#CROP
#ECRAN
#image
EndEnumeration
; Global HBarre.i = GetBarHeight()
Global Canvas_MAX_L = 431
Global Canvas_MAX_H = 497
Procedure TailleEcran()
Shared ECR_Y,ECR_Y
ECR_X = GetSystemMetrics_(0)
ECR_Y = GetSystemMetrics_(1)
EndProcedure
Procedure OpenWindow_LDVM()
hwnd = OpenWindow(#LDVM, 419, 216, 433, 600, "LDV MULTIMEDIA - Crop Crop !", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If hwnd
StringGadget(#ORI_X, 40, 80, 70, 20, "", #PB_String_Numeric|#PB_String_ReadOnly)
StringGadget(#ORI_Y, 150, 80, 70, 20, "", #PB_String_Numeric|#PB_String_ReadOnly)
TextGadget(#TXT_L_ORI, 5, 80, 25, 20, "L", #PB_Text_Center|#SS_CENTERIMAGE)
TextGadget(#Text_3, 120, 80, 25, 20, "H", #PB_Text_Center|#SS_CENTERIMAGE)
ButtonGadget(#CHARGER, 1, 1, 430, 75, "Charger une image")
ButtonGadget(#CROP, 320, 77, 110, 25, "Recadrer !")
DisableGadget(#CROP,1)
CanvasGadget(#ECRAN, 1, 102, Canvas_MAX_L, Canvas_MAX_H, #PB_Canvas_DrawFocus|#PB_Canvas_ClipMouse)
EndIf
EndProcedure
OpenWindow_LDVM()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ECRAN
OutputID = CanvasOutput(#ECRAN)
If EventType() = #PB_EventType_LeftButtonDown And EventType() = GetGadgetAttribute(#ECRAN, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DepartX = GetGadgetAttribute(#ECRAN, #PB_Canvas_MouseX)
DepartY = GetGadgetAttribute(#ECRAN, #PB_Canvas_MouseY)
EndIf
Debug "Dep X : " + Str(DepartX)
Debug "Dep Y : " + Str(DepartY)
If EventType() = #Pb_EventType_LeftButtonup And EventType() = #PB_EventType_Focus And EventType() = GetGadgetAttribute(#ECRAN, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
FinX = GetGadgetAttribute(#ECRAN, #PB_Canvas_MouseX)
FinY = GetGadgetAttribute(#ECRAN, #PB_Canvas_MouseY)
EndIf
Debug "Fin X : " + Str(FinX)
Debug "Fin Y : " + Str(FinY)
Case #CHARGER
Limg = 0 : Himg = 0
im$ = OpenFileRequester("Charger une image","", "Fichier Image|*.jpg;*.png;*.bmp;*.tiff",0)
If im$
Image = LoadImage(#image, im$)
If Image
Limg = ImageWidth(#image)
Himg = ImageHeight(#image)
If Limg > Himg
Format = Paysage
ElseIf Limg < Himg
Format = Portrait
EndIf
DisableGadget(#CROP,0)
Select Format
Case Paysage
; Produit en croix pour afficher l'image dans le canvas
Case Portrait
; Produit en croix pour afficher l'image dans le canvas
EndSelect
Else
Debug "non"
EndIf
EndIf
Case #CROP
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDVM
CloseWindow(#LDVM)
Break
EndSelect
EndSelect
ForEver