En VISUALBAISC5.0, puede utilizar el método de reproducción de archivos de animación de video (*.AVI) para agregar efectos de animación a nuestro software, pero ¿cómo lograr el efecto de imagen en imagen de video en el software? Después de la exploración del autor, descubrí que este efecto se puede lograr utilizando las funciones API mciExecute, mciSendString y SetWindowPos de WIDOWS95.
A continuación, el autor toma como ejemplo el método más utilizado de superposición de una imagen pequeña sobre una imagen grande para ilustrar el método de implementación de imagen en imagen de video.
1. Cree un formulario. Ingrese al entorno del sistema VISUALBAISC5.0 y cree un nuevo formulario FORM1.
2. Cree una ventana de vídeo. Aquí el autor utiliza dos cuadros de imagen (PictureBox), uno grande y otro pequeño, como ventana de vídeo. Seleccione el control PictureBox en el Cuadro de herramientas de control y extraiga dos cuadros (Imagen1 e Imagen2) en el formulario. Entre ellos, Imagen1 es una pantalla grande y reproduce el archivo AVI01.AVI; Imagen2 es una pantalla pequeña y reproduce el archivo AVI02.AVI.
3. Escriba el script para el control correspondiente.
Módulos comunes:
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
ACTIVAR proceso de FORM1:
DimAAAsLargo
DimPlayAviAsLong
DimtmpValAsString
DimKeyValSizeAsLong
OnErrorResumeNext
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
PlayAvi=mciSendString("STATUSAVI01READY" Str(Picture2.hwnd),tmpVal,KeyValSize,0)
SiReproducirAvi<>263Entonces
PlayAvi=mciExecute("closeAVI01")
Fin si
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
PlayAvi=mciSendString("OPENAVI01.AVIALIASAVI01TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture2.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Imagen1.Ancho
y1Pos=Imagen1.Altura
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
AA=mciSendString("STATUSAVI01WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
Si (Asc (Mid (tmpVal, KeyValSize, 1)) = 0) Entonces
tmpVal=Izquierda(tmpVal,KeyValSize-1)
Demás
tmpVal=Izquierda(tmpVal,KeyValSize)
Fin si
AA=EstablecerPosVentana(tmpVal,0,0,0,x1Pos,y1Pos,0)
AA=mciExecute("WINDOWAVI01STATESHOW")
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
PlayAvi=mciSendString("STATUSAVI02READY" Str(Picture1.hwnd),tmpVal,KeyValSize,0)
SiReproducirAvi<>263Entonces
PlayAvi=mciExecute("CLOSEAVI02")
Fin si
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
PlayAvi=mciSendString("OPENAVI02.AVIALIASAVI02TYPEAVIVIDEOSTYLECHILDPARENT" Str(Picture1.hwnd) "WAIT",tmpVal,KeyValSize,0)
x1Pos=Imagen2.Ancho
y1Pos=Imagen2.Altura
tmpVal=Cadena$(1024,0)
TamañoValClave=1024
AA=mciSendString("STATUSAVI02WINDOWHANDLEWAIT",tmpVal,KeyValSize,0)
Si (Asc (Mid (tmpVal, KeyValSize, 1)) = 0) Entonces
tmpVal=Izquierda(tmpVal,KeyValSize-1)
Demás
tmpVal=Izquierda(tmpVal,KeyValSize)
Fin si
AA=EstablecerPosVentana(tmpVal,0,0,0,x1Pos,y1Pos,0)
MciExecute"WINDOWAVI02STATESHOW"
MciExecute"PLAYAVI01REPEAT"
MciExecute"PLAYAVI02REPEAT"
EnErrorGoTo0
Proceso de descarga de consultas de FORM1:
mciEjecutar"STOPAVI01"
mciEjecutar"STOPAVI02"
mciEjecutar"CLOSEAVI01"
mciEjecutar"CLOSEAVI02"
Cuando ejecutas este programa, puedes ver que se reproducen dos animaciones al mismo tiempo, logrando el efecto de imagen en imagen del vídeo. El programa anterior se ejecuta correctamente en VISUALBAISC5.0 y WINDOWS95. ->