Page 2 sur 2

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 10:32
par SPH
Thyphoon a écrit :au lieu d'un imageGadget utilise un canvasGadget ! et là tu pourra capturer le clavier ou la souris pour zoomer sur ton image !
Il n'y a pas d'instruction CanvasGadget meme dans la derniere beta :cry:

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 10:36
par Fred
Sisi

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 10:50
par SPH
Fred a écrit :Sisi
J'aimerais bien dire aussi "sisi" mais il n'apparait pas dans l'aide...

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 11:03
par Thyphoon
SPH a écrit :
Fred a écrit :Sisi
J'aimerais bien dire aussi "sisi" mais il n'apparait pas dans l'aide...
essaye de réinstaller avec l'aide en anglais ! :D

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 11:15
par SPH
Thyphoon a écrit :
SPH a écrit :
Fred a écrit :Sisi
J'aimerais bien dire aussi "sisi" mais il n'apparait pas dans l'aide...
essaye de réinstaller avec l'aide en anglais ! :D
Est ce que tu pourrais m'indiquer la syntaxe et l'aide en francais ? :mrgreen:

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 11:20
par Ar-S
Toujours installer la version anglaise pour les versions beta, c'est plus prudent coté doc.
je peux pas t'aider, j'attends la version finale pour me mettre à jour.
Pas de projet 3D pour le moment (meme si d'autres commandes sont alléchantes...)

Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 11:25
par Thyphoon
Syntax : Result = CanvasGadget(#Gadget, x, y, Width, Height [, Flags])
pour les flags =>
  • #PB_Canvas_Border : dessine au tour du gadget.
  • #PB_Canvas_ClipMouse: Confines the mouse to the gadget while a button is pressed.
  • #PB_Canvas_GrabMouse: Reports mouse events even outside of the gadget while a button is pressed (Windows, Linux only)
  • #PB_Canvas_Keyboard : Allows the gadget to receive the keyboard focus and keyboard events.
  • #PB_Canvas_DrawFocus: Draws a focus rectangle on the gadget if it has keyboard focus.
et tu peux detecter les evenements suivant avec la commande EventType()
  • #PB_EventType_MouseEnter : The mouse cursor entered the gadget
  • #PB_EventType_MouseLeave : The mouse cursor left the gadget
  • #PB_EventType_MouseMove : The mouse cursor moved
  • #PB_EventType_MouseWheel : The mouse wheel was moved
  • #PB_EventType_LeftButtonDown : The left mouse button was pressed
  • #PB_EventType_LeftButtonUp : The left mouse button was released
  • #PB_EventType_RightButtonDown : The right mouse button was pressed
  • #PB_EventType_RightButtonUp : The right mouse button was released
  • #PB_EventType_MiddleButtonDown: The middle mouse button was pressed
  • #PB_EventType_MiddleButtonUp : The middle mouse button was released
  • #PB_EventType_Focus : The gadget gained keyboard focus
  • #PB_EventType_LostFocus : The gadget lost keyboard focus
  • #PB_EventType_KeyDown : A key was pressed
  • #PB_EventType_KeyUp : A key was released
mais le mieux c'est te donner le code d'exemple qu'il te reste plus qu'a étudier

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - CanvasGadget example file
;
;    (c) 2010 - Fantaisie Software
;
; ------------------------------------------------------------
;

Enumeration
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 
EndEnumeration

Enumeration
  #GADGET_Canvas
  #GADGET_Color 
  #GADGET_Brush
  #GADGET_Line
  #GADGET_Box
  #GADGET_Circle
  #GADGET_Fill
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
EndEnumeration

Global CurrentColor, CurrentMode, StartX, StartY

; Draw the mouse action result depending on the currently selected mode and event type
;
Procedure DrawAction(x, y, EventType)

  If StartDrawing(CanvasOutput(#GADGET_Canvas))
    Select CurrentMode
    
      Case #GADGET_Brush
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, 5, CurrentColor)
        EndIf
        
      Case #GADGET_Line
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
      
      Case #GADGET_Box
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
        
      Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        
        If x > StartX
          rx = x - StartX
        Else
          rx = StartX - x
        EndIf
        
        If y > StartY
          ry = y - StartY
        Else
          ry = StartY - y
        EndIf
        
        If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
          ry = rx
        EndIf
        
        Ellipse(StartX, StartY, rx, ry, CurrentColor)
      
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
  
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

CurrentColor = $000000
CurrentMode  = #GADGET_Brush
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, 380, 380, 24)

If OpenWindow(0, 0, 0, 460, 400, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(#GADGET_Canvas, 10, 10, 380, 380, #PB_Canvas_ClipMouse)

  ButtonImageGadget(#GADGET_Color, 400, 10, 50, 50, ImageID(#IMAGE_Color))
  
  ButtonGadget(#GADGET_Brush,  400, 100, 50, 25, "Brush",  #PB_Button_Toggle)
  ButtonGadget(#GADGET_Line,   400, 130, 50, 25, "Line",   #PB_Button_Toggle)
  ButtonGadget(#GADGET_Box,    400, 160, 50, 25, "Box",    #PB_Button_Toggle)
  ButtonGadget(#GADGET_Circle, 400, 190, 50, 25, "Circle", #PB_Button_Toggle)
  ButtonGadget(#GADGET_Fill,   400, 220, 50, 25, "Fill",   #PB_Button_Toggle)
    
  ButtonGadget(#GADGET_Clear,  400, 280, 50, 25, "Clear")
  
  ButtonGadget(#GADGET_Load,   400, 335, 50, 25, "Load")
  ButtonGadget(#GADGET_Save,   400, 365, 50, 25, "Save")
  
  SetGadgetState(#GADGET_Brush, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
    
      Select EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            Case #PB_EventType_LeftButtonDown
              ;
              ; This stores the current content of the CanvasGadget in #IMAGE_Content,
              ; so it can be re-drawn while the mouse moves
              ;
              If StartDrawing(ImageOutput(#IMAGE_Content))
                DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
                StopDrawing()
              EndIf
              
              StartX = X
              StartY = Y
              DrawAction(X, Y, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
        Case #GADGET_Color
          CurrentColor = ColorRequester(CurrentColor)
          If StartDrawing(ImageOutput(#IMAGE_Color))
            Box(0, 0, 35, 35, CurrentColor)
            StopDrawing()
            SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
          EndIf
          
        Case #GADGET_Brush, #GADGET_Line, #GADGET_Box, #GADGET_Circle, #GADGET_Fill
          EventGadget = EventGadget()
          For Gadget = #GADGET_Brush To #GADGET_Fill
            If Gadget = EventGadget
              SetGadgetState(Gadget, 1) 
            Else
              SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
            EndIf
          Next Gadget          
          CurrentMode = EventGadget             
      
        Case #GADGET_Clear
          If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, 380, 380, $FFFFFF)
            StopDrawing()
          EndIf
      
        Case #GADGET_Load
          File$ = OpenFileRequester("Load Image...", "", "JPEG Images|*.jpeg|All Files|*.*", 0)
          If File$
            If LoadImage(#IMAGE_LoadSave, File$)
              If StartDrawing(CanvasOutput(#GADGET_Canvas))
                Box(0, 0, 380, 380, $FFFFFF)
                DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
                StopDrawing()
              EndIf
              FreeImage(#IMAGE_LoadSave)
            Else
              MessageRequester("CanvasGadget", "Cannot load image: " + File$)
            EndIf
          EndIf
              
        Case #GADGET_Save
          File$ = SaveFileRequester("Save Image...", File$, "JPEG Images|*.jpeg|All Files|*.*", 0)
          If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
            If CreateImage(#IMAGE_LoadSave, 380, 380, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
              DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
              StopDrawing()
              
              If SaveImage(#IMAGE_LoadSave, File$, #PB_ImagePlugin_JPEG) = 0
                MessageRequester("CanvasGadget", "Cannot save image: " + File$)
              EndIf
              
              FreeImage(#IMAGE_LoadSave)
            EndIf            
          EndIf
                
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow

EndIf


Re: Image decrypté sans etre sur le diskdur

Publié : ven. 24/juin/2011 11:34
par SPH
Merci

Re: Image decrypté sans etre sur le diskdur

Publié : sam. 25/juin/2011 10:13
par falsam
Réponse tardive en reprenant ton code initial.

Touche + et - pour redimensionner l'image sélectionnée.

Code : Tout sélectionner

UseJPEGImageDecoder()
Enumeration
  #Window
  #ViewImage
  #ImageTmp
  #Image
  #Kbd_Add
  #Kbd_Subtract
EndEnumeration

Zoom.f=1

file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$) 
      length = Lof(0)                            ; Lit la taille en octets du fichier 
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      EndIf
      CloseFile(0)
    EndIf
  EndIf
  
  Resultat = CatchImage(#ImageTmp, *MemoryID, length)
  CopyImage(#ImageTmp, #Image)
  ;Debug resultat
  
  OpenWindow(#Window, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "Resultat de ma selection - "+Str(zoom*100)+" %", #PB_Window_SystemMenu)
  ImageGadget(#ViewImage, 0,0,300,200,ImageID(#Image))
  AddKeyboardShortcut(#Window, #PB_Shortcut_Add, #Kbd_Add)
  AddKeyboardShortcut(#Window, #PB_Shortcut_Subtract, #Kbd_Subtract)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Menu
        CopyImage(#ImageTmp, #Image)
        Select EventMenu()
          Case #Kbd_Add
            Zoom=Zoom+0.05
            
          Case #Kbd_Subtract
            Zoom=Zoom-0.05
            
        EndSelect
        
        SetWindowTitle(#Window, "Resultat de ma selection - "+Str(zoom*100)+" %")
        ;Mise à jour de l'image dans son gadget
        If Zoom>0.1
          ResizeImage(#Image, ImageWidth(#Image)*Zoom, ImageHeight(#Image)*Zoom)
          SetGadgetState(#ViewImage, ImageID(#Image))
          ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, ImageWidth(#Image), ImageHeight(#Image))
        Else
          Zoom=0.1
        EndIf
        
        
      Case #PB_Event_CloseWindow
        End                
      
  EndSelect
ForEver

Re: Image decrypté sans etre sur le diskdur

Publié : sam. 25/juin/2011 10:44
par SPH
Merci falsam, il n'y a pas de reponse trop tardive. La tienne tombe bien.