ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

CAPTURER UNE VIDEO en IMAGES   



L'auteur

ybenam
Algérie Algérie
Membre Simple
# 0000002080
enregistré le 21/04/2008


Fiche personnelle


Note des membres
pas de note

Contributions > 11 - GDI +

CAPTURER UNE VIDEO en IMAGES
# 0000000619
ajouté le 15/06/2008 02:58:32 et modifié le 15/06/2008
consulté 8403 fois
Niveau initié

Version(s) Foxpro :
VFP 6.0


Télécharger le ZIP (19.37 Ko)
Description
Dans ce programme je vous propose d'organiser une capture d'écran où se joue une vidéo quelconque dans le WMplayer .
Par exemple faire une capture d'écran toutes les 3 sec, à concurence de 30images max.(je ne donne que le principe,
vous pouvez étendre à n'importe quelles valeurs).
Si voulez que les images soient jouables en vidéo,il faut un temps de capture de l'ordre de 0.25 s et avec un form+1timer
réglé à 0.25 sec env.,vous pouvez faire défiler les images de manière identique à la vidéo d'origine).
Bien sûr cela peut être étendu à toute activité dans l'écran (animation,tutoriel,...)
Même le son peut être capturé.A ce moment la il faudra rajouter au form en question un soundplayerpour le rendu.
La librairie GpImage est fournie en annexe dans le zip et doit être présente avec le programme.
Le même principe peut être adapté aux différentes formes que peut prendre une capture (zône,fenêtre,cercle,ellipse,presse
papier...GpImage peut réaliser tout cela sans problème.
J'espère que cela vous donnera des idées.
Avec un form on peut faire un travail plus élaboré avec des multi captures (je vous renvoie à l'exemple des fenêtres enfant de
solutions de vfp,leur création et leur mise en cascade,....)
NB:Si vous avez des écrans noirs lors de la capture (même avec la touche Imprime écran) ,voila une astuce pour contourner
ce problème:
1.Ouvrir le WMPlayer et aller au menu outils/options
2.Sélectionner l'onglet performances et cliquer 'options avancées'
3.Décocher 'Utiliser des superpositions'
et vous pourrez capturer sans problème. Télécharger le zip pour faire fonctionner le programme.
Amicalement.
Code source :
*Capture d'écran: test de capture d'une vidéo jouée au médiaplayer toutes les 3s à concurence de 30 images
*Gpimage.prg et GpImage.h doivent être présents.Exécuter le programme depuis son répertoire d'origine.

yrep0=sys(5)+sys(2003)

yMovie=getfile('wmv|mpg|avi')  &&vidéo jouable au Wmédiaplayer
if empty(yMovie)
return
endi
ymovie='"'+allt(ymovie)+'"'
run/n3 "c:\program files\windows media player\wmplayer.exe "  &yMovie  &&emplacement du wmplayer.exe à confirmer
inkey(2)

Declare Long FindWindow in Win32API String ClassName, String WindowName
lnhandle = FindWindow("Windows madia Player"NULL)
*****************
declare integer BringWindowToTop in Win32API integer lnWnd
 = BringWindowToTop(lnHandle )    &&mettre au top de toutes les éventuelles fenêtres pour la capture
*******************
oShell=createObject("wscript.shell")  &&obtenir le fullscreen (après le stransitionnings du WMPlayer)
oShell.sendKeys("%{ENTER}")
inkey(2)   &&attendre le fullscreen complet
*******************
_screen.windowstate=1
yRepImg= "c:\asupprimer"
if directory("c:\asupprimer")  &&préparation d'un répertoire des captures+nettoyer
set safe off
dele file c:\asupprimer\*.*
set safe  on
else
mkdir c:\asupprimer    &&&créer
endi

set defa to (yrep0)
ii=0
#include gpImage.h
**********************************
do while .t.
ii=ii+1
If Not "gpImage" $ Set("Procedure")
Set Procedure To gpImage Additive
EndIf

gdip = CreateObject("gpInit")
img  = CreateObject("gpImage")
img.Create(sysmetric(1),sysmetric(2))        &&image vierge aux dimension d'un écran entier
img.Capture(0)   &&capture écran entier
w=img.imagewidth
h=img.imageheight
if w#800 or h#600
img.resize(800,600)   &&redimensionnements à 800*600 px
endi
*****************
&&ordonner les captures dans le cas général (pour ne pas intervertir les images et bien conserver leur ordre de capture)
do case
case ii<=9
jj="000"+allt(str(ii))
case ii>9 and ii<=99
jj="00"+allt(str(ii))
case i>99 and ii<=999
jj="0"+allt(str(ii))
case ii>=1000
jj=allt(str(ii))
endcase
*****************
lcDest = yRepImg+"\capture" +jj+"_"sys(2015)+ ".jpg"        &&représentation unique de l'image
img.saveasJPEG(lcDest,75)      &&taux JPEG compression=75%
*****************
img=null
gdip=null

t0=seconds()
do while seconds()-t0<=3  &&1 capture toutes les 3secondes
enddo

if ii>=30  &&limite à 30 images
exit
endi
enddo

*****************************
oShell=createObject("wscript.shell")  &&FERMER LE WMPlayer
oShell.sendKeys("%{F4}")
******************************
_screen.windowstate=0
messagebox("Captures terminées-30 photos dans le répertoire "+yrep+" ! Visualisation va suivre !",0+32,"")
set defa to c:\asupprimer
gnbre=adir(gabase,"*.jpg")
if gnbre>0
DECLARE INTEGER ShellExecute IN shell32.dll ;
  INTEGER hndWin, STRING cAction, STRING cFileName, ;
  STRING cParams, STRING cDir, INTEGER nShowWin

aa="c:\asupprimer\"+gabase(1,1)    &&faites dérouler les images capturées
ShellExecute(0,"open",aa,"","",1)
endi
************************************
_screen.windowstate=0



Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3