Publié : mer. 05/janv./2005 20:29
à mon avis les propblèmes en openscreen viennet de là :
Code : Tout sélectionner
iCamInitWindow(#True, #False) = 0
Forums PureBasic - Français
http://forums.purebasic.com/french/
Code : Tout sélectionner
iCamInitWindow(#True, #False) = 0
sinon pour avoir un meilleur rafraichissement il faut mettreif #Mode is True the window its opened without borders (to use iCamPlay on full screen mode
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
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 PBThyphoon 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![]()
restera alors plus qu'a maitrisé la detection de mouvement !!)
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