Page 1 sur 2

ScreenShoot partiel

Publié : sam. 08/juil./2006 22:26
par SPH
Quelle est la méthode la plus simple pour screenshooter un petit morceau de ce qu'il y a a l'ecran ?? (style ce qu'il y a de (12,15 to 30,33))

Publié : sam. 08/juil./2006 22:37
par nico
C'est très simple, le code habituel pour capturer l'image du bureau que tu retailles !

Publié : dim. 09/juil./2006 10:57
par SPH
hmmm, je vais etre plus précis : comme il s'agit d'etre TRES reactif, mon programme doit en fait analyser non pas un morceau de l'ecran mais a la limite un seul pixel. Il attend que le pixel change de couleur et hop, il passe AU PLUS VITE a la suite.
Je pense que lire ce pixel en memoire video sera la meilleure methode. Mais quelqu'un pourrait il rapeller comment on examine un pixel en mem video ?
merci :x

Publié : dim. 09/juil./2006 11:41
par TersaKen
Point(x,y)

Publié : dim. 09/juil./2006 12:07
par Droopy
Teste ça ( Code de ?? )

Code : Tout sélectionner

;{ GetPixelColor (Start)                                         
; Return the RGB color of the pixel at the specified coordinates
; or #CLR_INVALID (-1) if coordinates is outside the screen

ProcedureDLL GetPixelColor(x,y)
  sysviewDC = GetDC_( hwndSysview ) 
  ProcedureReturn GetPixel_( sysviewDC,x, y ) 
EndProcedure

MERCI

Publié : dim. 09/juil./2006 12:52
par SPH
Merci, ca marche. :wink:

Pour que tout le monde en profite :

Code : Tout sélectionner

InitMouse() 
InitKeyboard() 
OpenConsole()
PrintN("Pointez un pixel")
old=-1

Repeat
Delay(2)
lpPoint.POINT 
GetCursorPos_(lpPoint) 
X=lpPoint\x
Y=lpPoint\y
sysviewDC = GetDC_( hwndSysview ) 
rvb=GetPixel_( sysviewDC , X , Y )
If rvb<>old
PrintN("RVB="+Str(rvb)+" R:"+Str(Red(rvb))+" V:"+Str(Green(rvb))+" V:"+Str(Blue(rvb)))
old=rvb
EndIf
ForEver

Publié : dim. 09/juil./2006 14:37
par Flype
Si je dis pas de bêtise, il faut libérer le DC avec ReleaseDC_() systèmatiquement. Sinon voici un autre example.

Code : Tout sélectionner

Macro StrC(c)
  Str(Red(c))+", "+Str(Green(c))+", "+Str(Blue(c))
EndMacro

Define mouse.POINT, screen.l, color.l, old.l = -1

If OpenWindow(0, 0, 0, 200, 45, "GetPixel", #PB_Window_BorderLess|#PB_Window_ScreenCentered) 
  
  StickyWindow(0, #True)
  CreateGadgetList(WindowID(0))
  TextGadget(0, 15, 15, 170, 15, "", #PB_Text_Center)
  
  Repeat 
    
    Select WindowEvent()
      
      Case #PB_Event_CloseWindow
        Break
        
      Case #Null
        
        If GetCursorPos_(mouse) 
          
          screen = GetDC_(#Null)
          
          If screen
            
            color = GetPixel_(screen, mouse\x, mouse\y)
            
            If color <> #CLR_INVALID
              If color <> old
                SetGadgetText(0, StrC(color))
                SetGadgetColor(0, #PB_Gadget_BackColor, color)
                old = color
              EndIf
            EndIf
            
            ReleaseDC_(#Null, screen)
            
          EndIf
          
        EndIf
        
    EndSelect
    
  ForEver
  
EndIf

Publié : dim. 09/juil./2006 16:26
par nico
C'est bien aussi de prévoir une sortie de programme Flype! :)

Publié : dim. 09/juil./2006 16:47
par Flype
Alt+F4 ;-)

Publié : dim. 09/juil./2006 21:50
par nico
J'avais pas vu le close tout en haut, par habitude je le met toujours en bas!

Publié : lun. 10/juil./2006 8:34
par Flype
et moi toujours en haut :D

Publié : lun. 10/juil./2006 10:06
par poshu
Rien à voir: SPH, ton cephiroth dans la boue doit être un des phantasme #1 de toutes les loligoth du japon.

Publié : lun. 10/juil./2006 10:40
par Flype
loligoth ?

je connaissais les GolGoth dans Goldorak...

Publié : ven. 14/juil./2006 20:16
par wolfjeremy
Flype,

Tu saurais me dire comment récuperer la couleur d'un pixel dans une screen ? (où une image est afficher avec drawimage, donc un pixel de l'image)

Merci pour ton aide.

Publié : ven. 14/juil./2006 21:15
par Thyphoon
wolfjeremy a écrit :Flype,

Tu saurais me dire comment récuperer la couleur d'un pixel dans une screen ? (où une image est afficher avec drawimage, donc un pixel de l'image)

Merci pour ton aide.
point(x,y)=Col ? non c'est pas ça que tu veux ?