Kaptured

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Kaptured

Message par venom »

bonjour,

voilà tout a l'heur j'ai eu l'idée de faire un programme qui facilite les imprimes écrans :wink:

donc voici ce petit soft du nom de Kaptured qui se loge dans le systray
pour de la disscretion et de la rapidité d'accées :wink: .

Kaptured

voila en attente de commentaires :wink:



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Message par Eric »

C'est un bon début,
1- tu devrais donner la possibilité du format de l'image
2- Permettre le choix de la capture; Desktop ou Fenetre active
3- Permettre l'impression
4- Permettre l'inversion des couleurs noir et blanc pour imprimer
5- Prendre en compte la touche "Imp.écr"


Pour le boulot, j'ai réalisé cela :

http://pagesperso-orange.fr/purelog/produit5.html

Cdt,

Eric
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Eric a écrit :C'est un bon début,
1- tu devrais donner la possibilité du format de l'image
2- Permettre le choix de la capture; Desktop ou Fenetre active
3- Permettre l'impression
4- Permettre l'inversion des couleurs noir et blanc pour imprimer
5- Prendre en compte la touche "Imp.écr"


Pour le boulot, j'ai réalisé cela :

http://pagesperso-orange.fr/purelog/produit5.html

Cdt,

Eric
Tout à fait !
Du courage !!!
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

hmmm, j'en avais pondu un aussi pour le taf
il pemet de
sauver en jpeg ou bmp
recadrer l'image
code 3.94

Code : Tout sélectionner

Enumeration
  #WND_MAIN
  #DLG_MAIN_BUTCAPTURE
  #DLG_MAIN_POPUP
  #DLG_MAIN_POPUP_SAUVEBMP
  #DLG_MAIN_POPUP_SAUVEJPG
  #DLG_MAIN_POPUP_SAUVZON
  #DLG_MAIN_POPUP_RECOMM
  #DLG_MAIN_POPUP_QUITTER
EndEnumeration

Structure STRU_zone_rect
  xdep.w
  ydep.w
  xfin.w
  yfin.w
  Width.w
  Height.w
  ImageCourante.w
EndStructure

Global WinWidth.w
Global WinHeight.w
Global sur_demande.b
Global zone_ecran.b
Global FlagCapture.b
Global Mx.w
Global My.w
Global zone_rect.STRU_zone_rect
Global debut_rect.b

Procedure drawLocalPointAs(cx.w,cy.w)
  If StartDrawing(WindowOutput())
    FrontColor($FF,0,0)
    LineXY(cx-2,cy,cx+2,cy)
    LineXY(cx,cy-2,cx,cy+2)
    FrontColor(0,0,0)
    StopDrawing() 
  EndIf
EndProcedure

Procedure rectangleElastique(x1.w,y1.w,x2.w,y2.w,cas.b)
  StartDrawing(WindowOutput())
    DrawingMode(cas)
    LineXY(x1,y1,x2,y1)
    LineXY(x2,y1,x2,y2)
    LineXY(x2,y2,x1,y2)
    LineXY(x1,y2,x1,y1)
    If cas=2
      Delay(10)
      LineXY(x1,y1,x2,y1)
      LineXY(x2,y1,x2,y2)
      LineXY(x2,y2,x1,y2)
      LineXY(x1,y2,x1,y1)
    EndIf 
  StopDrawing()
EndProcedure

Procedure CaptureScreen(left.l, top.l, Width.l, Height.l)
dm.DEVMODE ;structure for CreateDC()
srcDC.l
trgDC.l
BMPHandle.l
srcDC = CreateDC_("DISPLAY", "", "", dm)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, Width, Height, srcDC, left, top, #SRCCOPY)
OpenClipboard_(#NULL) 
EmptyClipboard_()
SetClipboardData_(2, BMPHandle)
;CloseClipboard_()
DeleteDC_( trgDC)
ReleaseDC_( BMPHandle, srcDC)
ProcedureReturn
EndProcedure 

Procedure Initialisation()
  WinWidth = GetSystemMetrics_(#SM_CXFULLSCREEN)
  WinHeight = GetSystemMetrics_(#SM_CYFULLSCREEN)
  FlagCapture = 0
  debut_rect = 0
  ImageCourante = 0
   
;   result = OpenPreferences("PhotoGraph.prefs") : Debug result
;   sur_demande = ReadPreferenceLong("SUR DEMANDE",1)
;   zone_ecran =  ReadPreferenceLong("ZONE ECRAN",0)
;   ClosePreferences()
;   If result = 0 ; crée le fichier préférence
;     result = CreatePreferences("PhotoGraph.prefs") : Debug result
;     WritePreferenceLong("SUR DEMANDE",sur_demande)
;     WritePreferenceLong("ZONE ECRAN",zone_ecran)
;     ClosePreferences()
;   EndIf
EndProcedure 

Procedure main_window()
  
  If OpenWindow(#WND_MAIN, WinWidth-100, WinHeight-25, 100, 25,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "Capture d'écran v0.3b")
    
 
    ;If CreateMenu(#DLG_MAIN_MENU)
      
    ;EndIf
    
    If CreatePopupMenu(#DLG_MAIN_POPUP)
      MenuItem(#DLG_MAIN_POPUP_SAUVEBMP,"Sauver en BMP")
      MenuItem(#DLG_MAIN_POPUP_SAUVEJPG,"Sauver en JPG")
      MenuItem(#DLG_MAIN_POPUP_SAUVZON,"Découper zone")
      MenuItem(#DLG_MAIN_POPUP_RECOMM,"Recommencer")
      MenuBar()
      MenuItem(#DLG_MAIN_POPUP_QUITTER,"Quitter")
    EndIf
    
    If CreateGadgetList(WindowID())
      ButtonGadget(#DLG_MAIN_BUTCAPTURE,0,0,105,25,"Capturer l'écran")
    EndIf
    
    Repeat
      EventID.l = WaitWindowEvent()
      Mx = WindowMouseX()-4  : My = WindowMouseY()-22
      Select EventID 
        
        Case #WM_RBUTTONDOWN
          DisplayPopupMenu(#DLG_MAIN_POPUP,WindowID())
          
        Case #WM_LBUTTONDOWN
          Select debut_rect 
            Case 1
              zone_rect\xdep = Mx
              zone_rect\ydep = My
              drawLocalPointAs(zone_rect\xdep,zone_rect\ydep)
              debut_rect = 2
            Case 2
              zone_rect\xfin = Mx
              zone_rect\yfin = My
              rectangleElastique(zone_rect\xdep,zone_rect\ydep,zone_rect\xfin,zone_rect\yfin,0)
              debut_rect = 0
              If zone_rect\xfin<zone_rect\xdep
                tmp = zone_rect\xfin
                zone_rect\xfin = zone_rect\xdep
                zone_rect\xdep = tmp
              EndIf
              If zone_rect\yfin<zone_rect\ydep
                tmp = zone_rect\yfin
                zone_rect\yfin = zone_rect\ydep
                zone_rect\ydep = tmp
              EndIf
              zone_rect\Width = zone_rect\xfin-zone_rect\xdep
              zone_rect\Height = zone_rect\yfin-zone_rect\ydep
              CreateImage(1, zone_rect\Width, zone_rect\Height)
              ImageCourante = 1
              GrabImage(0,1,zone_rect\xdep,zone_rect\ydep,zone_rect\Width,zone_rect\Height)

              StartDrawing(WindowOutput()) ; dessine l'image caturée...
              DrawImage(UseImage(1) , 0, 0) 
              StopDrawing()
              ResizeWindow(zone_rect\Width,zone_rect\Height)
              MoveWindow((WinWidth/2)-(zone_rect\Width/2),(WinHeight/2)-(zone_rect\Height/2))
          EndSelect
          
        Case #WM_MOUSEMOVE
          If debut_rect = 2
            rectangleElastique(zone_rect\xdep,zone_rect\ydep,Mx,My,2)
          EndIf
          
        Case #PB_EventMenu
          Select EventMenuID()
            Case #DLG_MAIN_POPUP_SAUVEBMP
              NomFichier$ = SaveFileRequester("Emplacement de l'image","*.bmp","Fichiers Bitmap|*.bmp",0)
              SaveImage(ImageCourante,NomFichier$,#PB_ImagePlugin_BMP  )

            Case #DLG_MAIN_POPUP_SAUVEJPG
              NomFichier$ = SaveFileRequester("Emplacement de l'image","*.jpg","Fichiers Bitmap|*.jpg",0)
              UseJPEGImageEncoder()
              SaveImage(ImageCourante,NomFichier$,#PB_ImagePlugin_JPEG  )
              
            Case #DLG_MAIN_POPUP_SAUVZON
              debut_rect = 1
              
              
            Case #DLG_MAIN_POPUP_RECOMM
              FlagCapture = 0 ; empèche l'appel à #PB_EventRepaint
              ImageCourante = 0
              HideMenu(#DLG_MAIN_POPUP,1)
              ResizeWindow(100,25)
              MoveWindow(WinWidth-100, WinHeight-25)
              HideGadget( #DLG_MAIN_BUTCAPTURE,0) ; montre le bouton
              
            Case #DLG_MAIN_POPUP_QUITTER
              Quit = 1
          EndSelect
        
        Case #PB_EventRepaint ;; au cas ou la fenetre est cachée permet de réafficher l'image
          If FlagCapture = 1
            StartDrawing(WindowOutput()) ; dessine l'image caturée...
            DrawImage(UseImage(ImageCourante) , 0, 0) 
            StopDrawing()
          EndIf
          
        Case #PB_EventGadget
          
          Select EventGadgetID()
            
            Case #DLG_MAIN_BUTCAPTURE
              HideGadget( #DLG_MAIN_BUTCAPTURE,1) ; cache le bouton
              HideWindow(#WND_MAIN,1) ; cache fenetre avec le bouton
               
              CaptureScreen(0,0,WinWidth,WinHeight) ; capture l'écran
              ciHwnd = GetClipboardData_(#CF_BITMAP) 
              If ciHwnd 
                GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP) 
                CreateImage(0, WinWidth, WinHeight) 
                StartDrawing(ImageOutput()) 
                  DrawImage(ciHwnd, 0, 0) 
                StopDrawing()
              EndIf 
                 
              ResizeWindow(WinWidth,WinHeight) ; redimensionne la fenetre avec le bouton
              MoveWindow(0,0) ; la déplace en 0,0
             
              HideWindow(#WND_MAIN,0) ; montre la fenêtre
              
              StartDrawing(WindowOutput()) ; dessine l'image caturée...
              DrawImage(UseImage(0) , 0, 0) 
              StopDrawing()
              FlagCapture = 1
              DisplayPopupMenu(#DLG_MAIN_POPUP,WindowID(),WinWidth/2,WinHeight/2)
          EndSelect   

        Case #PB_Event_CloseWindow  ; If the user has pressed on the close button
          Quit = 1
      EndSelect
      
    Until Quit <> 0
  EndIf
EndProcedure

Initialisation()
main_window()
End

   
; jaPBe Version=1.4.1.1
; Build=1
; FirstLine=0
; CursorPosition=0
; EnableNT4
; ExecutableFormat=Windows
; Executable=G:\PureBasic\Projets\Photograf\PhotoGraf 0.3c
; DontSaveDeclare
; EOF
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Le même convertit en PB 4.10

Code : Tout sélectionner

Enumeration 
  #WND_MAIN 
  #DLG_MAIN_BUTCAPTURE 
  #DLG_MAIN_POPUP 
  #DLG_MAIN_POPUP_SAUVEBMP 
  #DLG_MAIN_POPUP_SAUVEJPG 
  #DLG_MAIN_POPUP_SAUVZON 
  #DLG_MAIN_POPUP_RECOMM 
  #DLG_MAIN_POPUP_QUITTER 
EndEnumeration 

Structure STRU_zone_rect 
  xdep.w 
  ydep.w 
  xfin.w 
  yfin.w 
  Width.w 
  Height.w 
  ImageCourante.w 
EndStructure 

Global WinWidth.w 
Global WinHeight.w 
Global sur_demande.b 
Global zone_ecran.b 
Global FlagCapture.b 
Global Mx.w 
Global My.w 
Global zone_rect.STRU_zone_rect 
Global debut_rect.b 

Procedure drawLocalPointAs(cx.w,cy.w) 
  If StartDrawing(WindowOutput(#WND_MAIN)) 
    FrontColor(RGB(238, 0, 0)) 
    LineXY(cx-2,cy,cx+2,cy) 
    LineXY(cx,cy-2,cx,cy+2) 
    FrontColor(RGB(28, 53, 210)) 
    StopDrawing() 
  EndIf 
EndProcedure 

Procedure rectangleElastique(x1.w,y1.w,x2.w,y2.w,cas.b) 
  StartDrawing(WindowOutput(#WND_MAIN)) 
    DrawingMode(cas) 
    LineXY(x1,y1,x2,y1) 
    LineXY(x2,y1,x2,y2) 
    LineXY(x2,y2,x1,y2) 
    LineXY(x1,y2,x1,y1) 
    If cas=2 
      Delay(10) 
      LineXY(x1,y1,x2,y1) 
      LineXY(x2,y1,x2,y2) 
      LineXY(x2,y2,x1,y2) 
      LineXY(x1,y2,x1,y1) 
    EndIf 
  StopDrawing() 
EndProcedure 

Procedure CaptureScreen(left.l, top.l, Width.l, Height.l) 
dm.DEVMODE ;structure for CreateDC() 
srcDC.l 
trgDC.l 
BMPHandle.l 
srcDC = CreateDC_("DISPLAY", "", "", dm) 
trgDC = CreateCompatibleDC_(srcDC) 
BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height) 
SelectObject_( trgDC, BMPHandle) 
BitBlt_( trgDC, 0, 0, Width, Height, srcDC, left, top, #SRCCOPY) 
OpenClipboard_(#Null) 
EmptyClipboard_() 
SetClipboardData_(2, BMPHandle) 
;CloseClipboard_() 
DeleteDC_( trgDC) 
ReleaseDC_( BMPHandle, srcDC) 
ProcedureReturn 
EndProcedure 

Procedure Initialisation() 
  WinWidth = GetSystemMetrics_(#SM_CXFULLSCREEN) 
  WinHeight = GetSystemMetrics_(#SM_CYFULLSCREEN) 
  FlagCapture = 0 
  debut_rect = 0 
  ImageCourante = 0 
    
;   result = OpenPreferences("PhotoGraph.prefs") : Debug result 
;   sur_demande = ReadPreferenceLong("SUR DEMANDE",1) 
;   zone_ecran =  ReadPreferenceLong("ZONE ECRAN",0) 
;   ClosePreferences() 
;   If result = 0 ; crée le fichier préférence 
;     result = CreatePreferences("PhotoGraph.prefs") : Debug result 
;     WritePreferenceLong("SUR DEMANDE",sur_demande) 
;     WritePreferenceLong("ZONE ECRAN",zone_ecran) 
;     ClosePreferences() 
;   EndIf 
EndProcedure 

Procedure main_window() 
  
  If OpenWindow(#WND_MAIN, 0, 0, 150, 25,"Capture d'écran v0.4b",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) 
    
 
    If CreatePopupMenu(#DLG_MAIN_POPUP) 
      MenuItem(#DLG_MAIN_POPUP_SAUVEBMP,"Sauver en BMP") 
      MenuItem(#DLG_MAIN_POPUP_SAUVEJPG,"Sauver en JPG") 
      MenuItem(#DLG_MAIN_POPUP_SAUVZON,"Découper zone") 
      MenuItem(#DLG_MAIN_POPUP_RECOMM,"Recommencer") 
      MenuBar() 
      MenuItem(#DLG_MAIN_POPUP_QUITTER,"Quitter") 
    EndIf 
    
    If CreateGadgetList(WindowID(#WND_MAIN)) 
      ButtonGadget(#DLG_MAIN_BUTCAPTURE,0,0,150,25,"Capturer l'écran") 
    EndIf 
    
    Repeat 
      EventID.l = WaitWindowEvent() 
      Mx = WindowMouseX(#WND_MAIN)-4  : My = WindowMouseY(#WND_MAIN)-22 
      Select EventID 
        
        Case #WM_RBUTTONDOWN 
          DisplayPopupMenu(#DLG_MAIN_POPUP,WindowID(#WND_MAIN)) 
          
        Case #WM_LBUTTONDOWN 
          Select debut_rect 
            Case 1 
              zone_rect\xdep = Mx 
              zone_rect\ydep = My 
              drawLocalPointAs(zone_rect\xdep,zone_rect\ydep) 
              debut_rect = 2 
            Case 2 
              zone_rect\xfin = Mx 
              zone_rect\yfin = My 
              rectangleElastique(zone_rect\xdep,zone_rect\ydep,zone_rect\xfin,zone_rect\yfin,0) 
              debut_rect = 0 
              If zone_rect\xfin<zone_rect\xdep 
                tmp = zone_rect\xfin 
                zone_rect\xfin = zone_rect\xdep 
                zone_rect\xdep = tmp 
              EndIf 
              If zone_rect\yfin<zone_rect\ydep 
                tmp = zone_rect\yfin 
                zone_rect\yfin = zone_rect\ydep 
                zone_rect\ydep = tmp 
              EndIf 
              zone_rect\Width = zone_rect\xfin-zone_rect\xdep 
              zone_rect\Height = zone_rect\yfin-zone_rect\ydep 
              CreateImage(1, zone_rect\Width, zone_rect\Height) 
              ImageCourante = 1 
              GrabImage(0,1,zone_rect\xdep,zone_rect\ydep,zone_rect\Width,zone_rect\Height) 

              StartDrawing(WindowOutput(#WND_MAIN)) ; dessine l'image caturée... 
              DrawImage(ImageID(1) , 0, 0) 
              StopDrawing() 
              ResizeWindow(#WND_MAIN,(WinWidth/2)-(zone_rect\Width/2),(WinHeight/2)-(zone_rect\Height/2),zone_rect\Width,zone_rect\Height) 
          EndSelect 
          
        Case #WM_MOUSEMOVE 
          If debut_rect = 2 
            rectangleElastique(zone_rect\xdep,zone_rect\ydep,Mx,My,2) 
          EndIf 
          
        Case #PB_Event_Menu 
          Select EventMenu() 
            Case #DLG_MAIN_POPUP_SAUVEBMP 
              NomFichier$ = SaveFileRequester("Emplacement de l'image","*.bmp","Fichiers Bitmap|*.bmp",0) 
              SaveImage(ImageCourante,NomFichier$,#PB_ImagePlugin_BMP  ) 

            Case #DLG_MAIN_POPUP_SAUVEJPG 
              NomFichier$ = SaveFileRequester("Emplacement de l'image","*.jpg","Fichiers JPEG|*.jpg",0) 
              UseJPEGImageEncoder() 
              SaveImage(ImageCourante,NomFichier$,#PB_ImagePlugin_JPEG  ) 
              
            Case #DLG_MAIN_POPUP_SAUVZON 
              debut_rect = 1 
              
              
            Case #DLG_MAIN_POPUP_RECOMM 
              FlagCapture = 0 ; empèche l'appel à #PB_EventRepaint 
              ImageCourante = 0 
              HideMenu(#DLG_MAIN_POPUP,1) 
              ResizeWindow(#WND_MAIN,WinWidth-100, WinHeight-25,100,25) 
              HideGadget( #DLG_MAIN_BUTCAPTURE,0) ; montre le bouton 
              
            Case #DLG_MAIN_POPUP_QUITTER 
              Quit = 1 
          EndSelect 
        
        Case #PB_Event_Repaint ;; au cas ou la fenetre est cachée permet de réafficher l'image 
          If FlagCapture = 1 
            StartDrawing(WindowOutput(#WND_MAIN)) ; dessine l'image caturée... 
            DrawImage(ImageID(ImageCourante) , 0, 0) 
            StopDrawing() 
          EndIf 
          
        Case #PB_Event_Gadget 
          
          Select EventGadget() 
            
            Case #DLG_MAIN_BUTCAPTURE 
              HideGadget( #DLG_MAIN_BUTCAPTURE,1) ; cache le bouton 
              HideWindow(#WND_MAIN,1) ; cache fenetre avec le bouton 
                
              CaptureScreen(0,0,WinWidth,WinHeight) ; capture l'écran 
              ciHwnd = GetClipboardData_(#CF_BITMAP) 
              If ciHwnd 
                GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP) 
                CreateImage(0, WinWidth, WinHeight) 
                StartDrawing(ImageOutput(#WND_MAIN)) 
                  DrawImage(ciHwnd, 0, 0) 
                StopDrawing() 
              EndIf 
                  
              ResizeWindow(#WND_MAIN,0,0,WinWidth,WinHeight) ; redimensionne la fenetre avec le bouton 
              
              HideWindow(#WND_MAIN,0) ; montre la fenêtre 
              
              StartDrawing(WindowOutput(#WND_MAIN)) ; dessine l'image caturée... 
              DrawImage(ImageID(0) , 0, 0) 
              StopDrawing() 
              FlagCapture = 1 
              DisplayPopupMenu(#DLG_MAIN_POPUP,WindowID(#WND_MAIN),WinWidth/2,WinHeight/2) 
          EndSelect    

        Case #PB_Event_CloseWindow  ; If the user has pressed on the close button 
          Quit = 1 
      EndSelect 
      
    Until Quit <> 0 
  EndIf 
EndProcedure 

Initialisation() 
main_window() 
End 

Fonction très intéressante le coup de l'élastique :D
Venom a plus qu'à s'en inspirer pour parfaire son prog. Nico en avait fait un très bien aux fonctions biens pensées et gérées il y a quelques temps, et qui m'avait servi au boulot pour extraire des photos d'une vidéo en image par image. Je ne sais où il est casé mais en cherchant bien il doit pas être loin :)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Jacobus a écrit : Nico en avait fait un très bien aux fonctions biens pensées et gérées il y a quelques temps, et qui m'avait servi au boulot pour extraire des photos d'une vidéo en image par image. Je ne sais où il est casé mais en cherchant bien il doit pas être loin :)
je peux éventuellement vous remettre a disposition l'exécutable,

il marche superbement, car il peu capturer
1-tout l'ecran
2-une fenetre précise (elle se détoure d'un cadre rouge)
3-a l'aide d'une fenetre de selection... on modifie la taille d'un cadre (fenetre),pour inclure ce que l'on veu recuperer !!

on peu inclure le curseur de la souris ou pas ..

la capture peut etre sauvé soit en jpg,png,bmp :D

Nico a vraiment du super boulot :)
Répondre