Page 1 sur 1

Kaptured

Publié : jeu. 20/déc./2007 19:11
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:



@++

Publié : sam. 22/déc./2007 10:43
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

Publié : sam. 22/déc./2007 17:08
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 !!!

Publié : sam. 22/déc./2007 19:10
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

Publié : sam. 22/déc./2007 20:39
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 :)

Publié : sam. 22/déc./2007 23:28
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 :)