Page 3 sur 3

Publié : mer. 05/janv./2005 20:29
par Oliv
à mon avis les propblèmes en openscreen viennet de là :

Code : Tout sélectionner

iCamInitWindow(#True, #False) = 0

Publié : mer. 05/janv./2005 20:36
par Thyphoon
Je pense que la solution serait d'ouvrir une fenêtre sans bordure au dimension de l'ecran ...

le plus curieux c'est que dans la notice donné avec la lib 0.2 de icamplay il parle bien de plein ecran
Pour la commande icaminitwindow
c'est marqué :
if #Mode is True the window its opened without borders (to use iCamPlay on full screen mode
sinon pour avoir un meilleur rafraichissement il faut mettre
icampreviewrate(0)

Aoui sinon bravo alors que j'avançais a pas de fourmit en 2 tours trois mouvement toi tu regles tout les pb !! :lol: remarque tant mieux...mais je prend un coup

Publié : mer. 05/janv./2005 20:37
par Oliv
En fait c'est pas bien compliqué en screen :D

Code : Tout sélectionner

;- Declarations
; Constantes
#Window = 0 

; Structures
Structure Screen
  Width.l
  Height.l
EndStructure

; Listes

; Buffer

; Variables
Sortie.b : Screen.Screen

Global Screen

Screen\Width = 640
Screen\Height = 480








Procedure FatalError (error$) 
  If error$ = "" : error$ = "Undefined error... outta here!" : EndIf 
  MessageRequester ("Program error -- aborting...", error$, #MB_ICONWARNING | #MB_SYSTEMMODAL) 
  End 
EndProcedure 


Procedure iCamInitWindow(icamMode.l, icamMenu.l) 
  ProcedureReturn CallFunction (0, "iCamInitWindow", icamMode, icamMenu) 
EndProcedure 


Procedure iCamSelectDriver() 
  ProcedureReturn CallFunction (0, "iCamSelectDriver") 
EndProcedure 


Procedure iCamSetMirror(Flag.b) 
  ProcedureReturn CallFunction(0,"iCamSetMirror",Flag) 
EndProcedure 


Procedure iCamEvent(Focus.b) 
  ProcedureReturn CallFunction(0,"iCamEvent") 
EndProcedure 


Procedure iCamCaptureFormat() 
  ProcedureReturn CallFunction (0, "iCamCaptureFormat") 
EndProcedure 


Procedure iCamCaptureDisplay() 
  ProcedureReturn CallFunction (0, "iCamCaptureDisplay") 
EndProcedure 


Procedure iCamGetMotion() 
  ProcedureReturn CallFunction (0, "iCamGetMotion") 
EndProcedure 


Procedure.l iCamGetWebcamImage() 
  ProcedureReturn CallFunction (0, "iCamGetWebcamImage") 
EndProcedure 


Procedure iCamPreviewRate(fps.l) 
  ProcedureReturn CallFunction (0, "iCamPreviewRate", fps) 
EndProcedure 



; Fin des procédures ********************************************************************


If InitSprite() = 0
  Fatalerror("DirectX")
EndIf

If OpenLibrary (0, "icamplay.dll") = 0 
  FatalError ("Can't open icamplay.dll!") 
EndIf 

If iCamInitWindow(#True, #False) = 0
  FatalError ("Ne peut pas initialiser iCamPlay")
EndIf

iCamPreviewRate(30)
; C'est mieux quand l'image n'est pas inversée 
iCamSetMirror(#True) 


; Création de la fenêtre
; OpenWindow(#Window,0,0,Screen\Width,Screen\Height,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered,"Test") 
; OpenWindowedScreen(WindowID(), 0, 0,Screen\Width,Screen\Height, 0, 0, 0) 
OpenScreen(640,480,32,"t")
InitKeyboard()
  
Repeat ; Jeu
  
  ExamineKeyboard()

  ClearScreen(120, 120, 120)  
  
  iCamGetMotion() 
  
  ImageID = iCamGetWebcamImage() 
  StartDrawing(ScreenOutput()) 
    DrawImage(ImageID,0,0) 
  StopDrawing() 
  
  FlipBuffers() 
  
  Delay(10) 
    
;   Select WindowEvent() 
;     Case #PB_Event_CloseWindow 
;       Sortie = 1 
;   EndSelect ; evite le plantage clic gauche 
    
Until KeyboardPushed(#PB_Key_Escape) ; Sortie = 1 
CloseScreen() 
CloseLibrary(0) 
End

Publié : mer. 05/janv./2005 20:40
par Thyphoon
Haaaaaaaargggggg celui qui comprend tout plus vite que son ombre c'est Oliv !! :lol: bravo !! je vais tester de suite

Publié : mer. 05/janv./2005 20:57
par Thyphoon
curieux j'ai plus d'image en plein ecran... ça reste noir ...

Je vais re tester plus tard apres avoir manger ! et si j'ai le courage apres un petit ciné !
En tout cas tu as déjà fait du bon boulot :D
restera alors plus qu'a maitrisé la detection de mouvement !! :o)

Publié : mer. 05/janv./2005 21:03
par Oliv
Thyphoon a écrit :curieux j'ai plus d'image en plein ecran... ça reste noir ...
En tout cas tu as déjà fait du bon boulot :D
restera alors plus qu'a maitrisé la detection de mouvement !! :o)
Oui, apparement soit nous, soit la dll, se déconnecte mal de la webcam, quand on la débranche et on la rebranche, plus de PB :?

Pour le boulot c'est 100% grace à toi, merci :D et bon courage !!!! :lol:

Publié : mer. 05/janv./2005 21:45
par Oliv
Voilà, enfin :D , un code pas forcément bien organisé à mon gout mais à mon avis facile à comprendre, il regroupe la gestion en écran et en fenêtre sous la constante : #Window_Screen (ligne 4). Il arrive que le programme soit mal fermé, dans ce cas ce n'est pas compliqué : ALT + CTRL + SUPPR et on supprime (dans processus si vous avez XP) PureBasic1XXXXXXXX.exe

Code : Tout sélectionner

;- Declarations 
; Constantes 
#Window = 0
#Window_Screen = 0 ; 0 = fenêtre et 1 = screen

; Structures 
Structure Screen 
  Width.l 
  Height.l
  Depth.l
EndStructure 

; Listes 

; Buffer 

; Variables 
Sortie.b : Screen.Screen 

Global Screen,Sortie 

Screen\Width = 640 
Screen\Height = 480
Screen\Depth = 16 ; Seulement utile pour #Window_Screen = 1








Procedure FatalError (error$) 
  If error$ = "" : error$ = "Undefined error... outta here!" : EndIf 
  MessageRequester ("Program error -- aborting...", error$, #MB_ICONWARNING | #MB_SYSTEMMODAL) 
  End 
EndProcedure 


Procedure iCamInitWindow(icamMode.l, icamMenu.l) 
  ProcedureReturn CallFunction (0, "iCamInitWindow", icamMode, icamMenu) 
EndProcedure 


Procedure iCamSelectDriver() 
  ProcedureReturn CallFunction (0, "iCamSelectDriver") 
EndProcedure 


Procedure iCamSetMirror(Flag.b) 
  ProcedureReturn CallFunction(0,"iCamSetMirror",Flag) 
EndProcedure 


Procedure iCamEvent(Focus.b) 
  ProcedureReturn CallFunction(0,"iCamEvent") 
EndProcedure 


Procedure iCamCaptureFormat() 
  ProcedureReturn CallFunction (0, "iCamCaptureFormat") 
EndProcedure 


Procedure iCamCaptureDisplay() 
  ProcedureReturn CallFunction (0, "iCamCaptureDisplay") 
EndProcedure 


Procedure iCamGetMotion() 
  ProcedureReturn CallFunction (0, "iCamGetMotion") 
EndProcedure 


Procedure.l iCamGetWebcamImage() 
  ProcedureReturn CallFunction (0, "iCamGetWebcamImage") 
EndProcedure 


Procedure iCamPreviewRate(fps.l) 
  ProcedureReturn CallFunction (0, "iCamPreviewRate", fps) 
EndProcedure 


Procedure.l CloseProgram(nom.s) 
  ; nom = nom de la fenêtre en cours 
  ; valeur de retour de la procedure : 
  ; >  1 = OK 
  ; >  0 = Erreur d'envoi du message d'arrêt au logiciel 
  ; > -1 = Le logiciel n'est pas en cours d'exécution 
  
  resultat = 1 
  winHwnd = FindWindow_(vbNullString, nom) 
  If winHwnd <> 0 
    If PostMessage_(winHwnd, #WM_CLOSE, 0, 0) = 0 
      resultat = 0 
    EndIf 
  Else 
    resultat = -1 
  EndIf 
  ProcedureReturn 
EndProcedure


Procedure Fenetre()
  UseWindow(0)
  Select WindowEvent()
    Case 161 ; là je ne comprends pas !!! #PB_Event_CloseWindow = 16 normalement
      Sortie = 1
  EndSelect  
EndProcedure


Procedure Clavier()
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape) : Sortie = 1 : EndIf
EndProcedure

Procedure iCam()
  iCamGetMotion() 
  ImageID = iCamGetWebcamImage() 
  StartDrawing(ScreenOutput()) 
    DrawImage(ImageID,0,0) 
  StopDrawing()
EndProcedure


Procedure Affichage()
  StartDrawing(ScreenOutput())
    DrawText("Text")
  StopDrawing()
  FlipBuffers()
  ClearScreen(120, 120, 120)
EndProcedure



; Fin des procédures ******************************************************************** 


If InitSprite() = 0 Or InitKeyboard() = 0
  Fatalerror("DirectX") 
EndIf 

If OpenLibrary (0, "icamplay.dll") = 0 
  FatalError ("Can't open icamplay.dll!") 
EndIf 

If iCamInitWindow(#True, #False) = 0 
  FatalError ("Ne peut pas initialiser iCamPlay") 
EndIf 

iCamPreviewRate(30) 
; C'est mieux quand l'image n'est pas inversée 
iCamSetMirror(#True) 


; Création de la fenêtre
If #Window_Screen = 0
  OpenWindow(#Window,0,0,Screen\Width,Screen\Height,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered,"Test") 
  OpenWindowedScreen(WindowID(), 0, 0,Screen\Width,Screen\Height, 0, 0, 0)
Else
  OpenScreen(Screen\Width,Screen\Height,Screen\Depth,"Test") 
EndIf

 
  
Repeat
  ; Gère le clavier
  Clavier()   
  
  ;Gère les commandes de la librairie
  iCam() 
  
  ; Gère l'affichage
  Affichage()
 
  ; Si on est en mode fenêtre, gère la fenêtre
  If #Window_Screen = 0
    Fenetre()    
  EndIf
  
  Delay(10)
Until Sortie = 1

CloseProgram("iCamPlay") ; Pour l'obliger à fermer (et encore) 
CloseScreen() 
CloseLibrary(0)
 
End 

Publié : mer. 05/janv./2005 22:46
par Thyphoon
ça marche super en fenêtre mais j'ai pas d'image en plein ecran ...tres curieux...

On utilise la version 0.2 de la lib ! il faudrait peut être essayer avec la 0.3 peut être qu'en demandant sur le forum anglais une âme charitable nous aiderait ! Car l'auteur j'ai l'impression qui ne repond pas a ses emails! et c'est bien dommage car sa library est super !

Dansle cas contraire je me demandais si avec la lib avicap32.dll on aurait pas pu faire la même chose .... le seul pb c'est qu'il faut trouver comment on fait du detection de mouvement ...
Bon allez je pars au ciné !
:wink: A+

Publié : jeu. 06/janv./2005 18:19
par Oliv
Je ne pense pas qu'il y ai une versin supérieure, sinon il la mettrait dans ses jeux je suppose, surtout maintenant qu'il a fait WMM basic, ça ne doit pas avoir une grande importance pour lui.
Pour la détection, je crois que je vais de toute façon la faire "manuellement" , car je n'arrive pas à mettre en oeuvre la sienne, et de plus j'aimerai bien me passer de la DLL qui n'a pas l'air très stable, seulement pour ça il faut arriver à capture les images dans un sprite ou une autre image :(