Por medio de la APIi podemos saber las dimensiones de un archivo AVI, como ancho y Alto, y otra informacion.
A continuacion el codigo:
#DEFINE OF_SHARE_DENY_WRITE 0x20
DECLARE LONG AVIFileOpen IN "avifil32" LONG @ppfile, STRING szFile, LONG mode, LONG pclsidHandler
DECLARE LONG AVIFileRelease IN "avifil32" LONG pfile
DECLARE LONG AVIFileInfo IN "avifil32" LONG NFichero, STRING @FDatos, LONG FTamano
DECLARE AVIFileInit IN "avifil32"
DECLARE AVIFileExit IN "avifil32"
LOCAL hFile AS LONG, AviInfo AS STRING
hFile = 10
AviInfo = REPLICATE(CHR(0),11*4) &&11 los elementos que tiene *4pos. que ocupa cada uno
AviInfo = AviInfo + SPACE(64) &&area para el string que devuelve
AVIFileInit()
cCad = "c:\smstit\ANIMATE\a180.avi"
IF AVIFileOpen(@hFile, cCad,OF_SHARE_DENY_WRITE, 0) = 0
IF AVIFILEINFO(hFile, @AviInfo, LEN(AviInfo)) = 0 Then
MESSAGEBOX("Tamaño: " + TRANSFORM(nRepStruct(AviInfo,6)) + "x" + TRANSFORM(nRepStruct(AviInfo,7)))
MESSAGEBOX(TRANSFORM(nRepStruct(AviInfo,1))+CHR(13)+; &&dwMaxBytesPerSec
TRANSFORM(nRepStruct(AviInfo,2))+CHR(13)+ ; &&dwFlags
TRANSFORM(nRepStruct(AviInfo,3))+CHR(13)+ ; &&dwCaps
TRANSFORM(nRepStruct(AviInfo,4))+CHR(13)+ ; &&dwStreams
TRANSFORM(nRepStruct(AviInfo,5))+CHR(13)+ ; &&dwSuggestedBufferSize
TRANSFORM(nRepStruct(AviInfo,6))+CHR(13)+ ; &&dwWidth
TRANSFORM(nRepStruct(AviInfo,7))+CHR(13)+ ; &&dwHeight
TRANSFORM(nRepStruct(AviInfo,8))+CHR(13)+ ; &&dwScale
TRANSFORM(nRepStruct(AviInfo,9))+CHR(13)+ ; &&dwRate
TRANSFORM(nRepStruct(AviInfo,10))+CHR(13)+ ; &&dwLength
TRANSFORM(nRepStruct(AviInfo,11))+CHR(13)+ ; &&dwEditCount
SUBSTR(AviInfo,11*4+1,64)) &&szFileType
ELSE
MESSAGEBOX("No Se pudo obtener las propiedades del archivo")
ENDIF
AVIFileRelease(hFile)
ELSE
MESSAGEBOX("Error al abrir el video")
ENDIF
AVIFileExit()
FUNCTION nRepStruct
LPARAMETERS cEstructura, nValor
LOCAL cCadena, nEmp
nEmp=((nValor-1)*4)+1
cCadena = SUBSTR(cEstructura,nEmp,4)
RETURN (ASC(SUBSTR(cCadena, 1,1))+ ;
BITLSHIFT(ASC(SUBSTR(cCadena, 2,1)), 8)+ ;
BITLSHIFT(ASC(SUBSTR(cCadena, 3,1)), 16)+ ;
BITLSHIFT(ASC(SUBSTR(cCadena, 4,1)), 24))
ENDFUNC
La informacion retornada viene dada por una estructura asi:
*Struct AVIFILEINFO
dwMaxBytesPerSec As Long
dwFlags As Long
dwCaps As Long
dwStreams As Long
dwSuggestedBufferSize As Long
dwWidth As Long
dwHeight As Long
dwScale As Long
dwRate As Long
dwLength As Long
dwEditCount As Long
szFileType As String * 64
*EndStruct
Saludos
Jorge Mota
Microsoft Visual FoxPro MVP
Guatemala
|