Dans VISUALBAISC5.0, vous pouvez utiliser la méthode de lecture de fichiers d'animation vidéo (*.AVI) pour ajouter des effets d'animation à notre logiciel, mais comment obtenir l'effet d'image dans l'image vidéo dans le logiciel ? Après l'exploration de l'auteur, j'ai découvert que cet effet pouvait être obtenu en utilisant les fonctions API mciExecute, mciSendString et SetWindowPos de WIDOWS95.
Ci-dessous, l'auteur prend comme exemple la méthode la plus couramment utilisée pour superposer une petite image sur une grande image pour illustrer la méthode de mise en œuvre de l'image dans l'image vidéo.
1. Créez un formulaire. Entrez dans l'environnement système VISUALBAISC5.0 et créez un nouveau formulaire FORM1.
2. Créez une fenêtre vidéo. Ici, l'auteur utilise deux zones d'image (PictureBox), une grande et une petite, comme fenêtre vidéo. Sélectionnez le contrôle PictureBox dans la boîte à outils de contrôle et extrayez deux cases (Picture1 et Picture2) dans le formulaire. Parmi eux, Picture1 est un grand écran et lit le fichier AVI01.AVI ; Picture2 est un petit écran et lit le fichier AVI02.AVI.
3. Écrivez le script du contrôle correspondant.
Modules communs :
DeclareFunctionmciExecuteLib"winmm.dll"(ByVallpstrCommandAsString)AsLong
DeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
Processus ACTIVER du FORM1 :
DimAAAsLong
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
SurErreurReprendreSuivant
tmpVal=Chaîne$(1024,0)
TailleValeurClé=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
SiPlayAvi<>263Alors
PlayAvi=mciExecute("closeAVI01")
FinSi
tmpVal=Chaîne$(1024,0)
TailleValeurClé=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Image1.Largeur
y1Pos=Image1.Hauteur
tmpVal=Chaîne$(1024,0)
KeyValSize = 1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
Si(Asc(Mid(tmpVal,KeyValSize,1))=0)Alors
tmpVal=Gauche(tmpVal,KeyValSize-1)
Autre
tmpVal=Gauche(tmpVal,KeyValSize)
FinSi
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=Chaîne$(1024,0)
TailleValeurClé=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
SiPlayAvi<>263Alors
PlayAvi=mciExecute("CLOSEAVI02")
FinSi
tmpVal=Chaîne$(1024,0)
TailleValeurClé=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Image2.Largeur
y1Pos=Image2.Hauteur
tmpVal=Chaîne$(1024,0)
KeyValSize = 1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
Si(Asc(Mid(tmpVal,KeyValSize,1))=0)Alors
tmpVal=Gauche(tmpVal,KeyValSize-1)
Autre
tmpVal=Gauche(tmpVal,KeyValSize)
FinSi
AA=SetWindowPos(tmpVal,0,0,0,x1Pos,y1Pos,0)
MciExécuter "WINDOWAVI02STATESHOW"
MciExécuter "PLAYAVI01REPEAT"
MciExécuter "PLAYAVI02REPEAT"
SurErreurGoTo0
Processus QueryUnload de FORM1 :
mciExécuter "STOPAVI01"
mciExécuter "STOPAVI02"
mciExécuter "CLOSEAVI01"
mciExécuter "CLOSEAVI02"
Lorsque vous exécutez ce programme, vous pouvez voir que deux animations sont jouées en même temps, obtenant ainsi l'effet d'image dans l'image de la vidéo. Le programme ci-dessus s'exécute avec succès dans VISUALBAISC5.0 et WINDOWS95. ->