IcamPlay et Purebasic....VMMBasic ??????

Sujets variés concernant le développement en PureBasic
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

à mon avis les propblèmes en openscreen viennet de là :

Code : Tout sélectionner

iCamInitWindow(#True, #False) = 0
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
Dernière modification par Thyphoon le mer. 05/janv./2005 20:38, modifié 1 fois.
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Haaaaaaaargggggg celui qui comprend tout plus vite que son ombre c'est Oliv !! :lol: bravo !! je vais tester de suite
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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:
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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 
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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+
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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 :(
Répondre