Wavyrn
Messages postés20Date d'inscriptionmercredi 8 août 2007StatutMembreDernière intervention 1 août 2008
-
10 déc. 2007 à 10:26
Wavyrn
Messages postés20Date d'inscriptionmercredi 8 août 2007StatutMembreDernière intervention 1 août 2008
-
11 déc. 2007 à 18:50
Bonjour,
après avoir trimer pour controler sous TWAIN une caméra qui n'était pas compatible, je suis passé à Video for Windows: j'ai trouvé un VFW.pas qui semble très bien, mais j'ai un souci:
pour acquérir une frame, je crée une fenetre de capture, je connect le driver, je lance (ou pas) une preview, et quand je click sur le bouton qui va bien, je demande la capture d'une frame:
capgrabframenostop(HdleAcqWin)
jusque la tout va bien, mais pour faire quelque chose de l'image, il faut utiliser une fonction de callback, que l'on assigne avec
capSetCallBackOnFrame( FhWndC, @CallbackFrameProc);
et CallbackFrameProc recoit en argument un handle et un pointeur sur une stucture VIDEOHDR. C'est là que ça rate: le handle n'est pas un windowhandle, et la structure est vide, mis à part un flag qui vaut 64...
une idée, quelqu'un? j'ai cherché des exemple, et ils ne courent pas les web
Wavyrn
Messages postés20Date d'inscriptionmercredi 8 août 2007StatutMembreDernière intervention 1 août 2008 11 déc. 2007 à 18:50
yop!
j'ai mon buffer! avec tous mes petits pixels dedans bien rangé!
bon, par contre, je ne saurais pas dire quelle était mon erreur: enervé, j'ai viré tout mon code pour reprendre à zero et vérifier ligne par ligne....
quoiqu'il en soit, pour le suivant qui se posera des questions:
pour controler l'acquisition webcam frame par frame en utilisant video for windows, les points clés sont les suivant:
creer la fenetre de capture
generer la liste de drivers disponibles (boucle for 0 à 9, GetDriverDescription)
connecter un driver
recuperer les infos le concernant (dans un CAPDRIVERCAPS)
utiliser les boites de dialogues du driver si elles existent
recuperer les paramètres de capture (videoformat et capturesetup)
allouer la mémoire necessaire
démarrer la preview
pour l'acquisition:
désactiver la preview
assigner la fonction callbackOnFrame*
demander un grabframe (il acquiert 1 image, et execute la fonction callbackonframe)
desassigner la fonction callbackonframe
réactiver la preview
* callbackonFrame:
déclarée auparavant,(globalement, chez moi) pour faire ce que l'on souhaite des données,
elle reçoit en argument, d'une part le handle de la fenêtre de capture, d'autre part une structure VIDEOHDR qui contient un pointeur sur le buffer (locké?) ou sont rangés les pixels. la structure contien aussi d'autres information utiles comme la taille du buffer.
Voilà, en espérant que ça serve à d'autres.
Et merci à Franky et Kenavo (dont le code est vraiment riche en enseignements)