Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con pasaje de .AVI a .BMP (https://www.clubdelphi.com/foros/showthread.php?t=23164)

zugazua2001 08-07-2005 05:56:50

Problema con pasaje de .AVI a .BMP
 
Problema con pasaje de .AVI a .BMP

Hola a todos, yo copie un codigo de ejemplo de como capturar imagenes en formato .bmp de un archivo .AVI, bien dicho codigo lo corri sobre windows 98 y corria perfectamente
Formatie la maquina y me encontre que ahora lo ejecuto y me graba siempre la misma imagen, corro el archivo .AVI en el multimedia y corre perfectamente.
Que pudo haber pasado el codigo es el siguiente:
Código Delphi [-]
 function GrabAVIFrame(avifn: string; iFrameNumber: Integer; ToFileName: TFileName): Boolean;
 var
 Error: Integer;
 pFile: PAVIFile;
 AVIStream: PAVIStream;
 gapgf: PGETFRAME;
 lpbi: PBITMAPINFOHEADER;
 bits: PChar;
 hBmp: HBITMAP;
 AviInfo: TAVIFILEINFOW;
 sError: string;
 TmpBmp: TBitmap;
 DC_Handle: HDC;
 begin
 Result := False;
 // Initialize the AVIFile library.
 AVIFileInit;
 // The AVIFileOpen function opens an AVI file
 Error := AVIFileOpen(pFile, PChar(avifn), 0, nil);
 if Error <> 0 then
 begin
 AVIFileExit;
 case Error of
 AVIERR_BADFORMAT: sError := 'The file couldn''t be read';
 AVIERR_MEMORY: sError := 'The file could not be opened because of insufficient memory.';
 AVIERR_FILEREAD: sError := 'A disk error occurred while reading the file.';
 AVIERR_FILEOPEN: sError := 'A disk error occurred while opening the file.';
 end;
 ShowMessage(sError);
 Exit;
 end;
 // AVIFileInfo obtains information about an AVI file
 if AVIFileInfo(pFile, @AVIINFO, SizeOf(AVIINFO)) <> AVIERR_OK then
 begin
 // Clean up and exit
 AVIFileRelease(pFile);
 AVIFileExit;
 Exit;
 end;
 // Show some information about the AVI
 FichaCamara.Memo1.Lines.Add('AVI Width : ' + IntToStr(AVIINFO.dwWidth));
 FichaCamara.Memo1.Lines.Add('AVI Height : ' + IntToStr(AVIINFO.dwHeight));
 FichaCamara.Memo1.Lines.Add('AVI Length : ' + IntToStr(AVIINFO.dwLength));
 // Open a Stream from the file
 Error := AVIFileGetStream(pFile, AVIStream, streamtypeVIDEO, 0);
 if Error <> AVIERR_OK then
 begin
 // Clean up and exit
 AVIFileRelease(pFile);
 AVIFileExit;
 Exit;
 end;
 // Prepares to decompress video frames
 gapgf := AVIStreamGetFrameOpen(AVIStream, nil);
 if gapgf = nil then
 begin
 AVIStreamRelease(AVIStream);
 AVIFileRelease(pFile);
 AVIFileExit;
 Exit;
 end;
 // Read current Frame
 // AVIStreamGetFrame Returns the address of a decompressed video frame
 lpbi := AVIStreamGetFrame(gapgf, iFrameNumber);
 if lpbi = nil then
 begin
 AVIStreamGetFrameClose(gapgf);
 AVIStreamRelease(AVIStream);
 AVIFileRelease(pFile);
 AVIFileExit;
 Exit;
 end;
 // Show number of frames:
 FichaCamara.Memo1.Lines.Add(Format('Framstart: %d FrameEnd: %d',
 [AVIStreamStart(AVIStream), AVIStreamEnd(AVIStream)]));
 TmpBmp := TBitmap.Create;
 try
 TmpBmp.Height := lpbi.biHeight;
 TmpBmp.Width := lpbi.biWidth;
 bits := Pointer(Integer(lpbi) + SizeOf(TBITMAPINFOHEADER));
 DC_Handle := CreateDC('Display', nil, nil, nil);
 try
 hBmp := CreateDIBitmap(DC_Handle, // handle of device context
 lpbi^, // address of bitmap size and format data
 CBM_INIT, // initialization flag
 bits, // address of initialization data
 PBITMAPINFO(lpbi)^, // address of bitmap color-format data
 DIB_RGB_COLORS); // color-data usage
 finally
 DeleteDC(DC_Handle);
 end;
 TmpBmp.Handle := hBmp;
 AVIStreamGetFrameClose(gapgf);
 AVIStreamRelease(AVIStream);
 AVIFileRelease(pfile);
 AVIFileExit;
 try
 TmpBmp.SaveToFile(ToFileName);
 Result := True;
 except
 end;
 finally
 TmpBmp.Free;
 end;
 end;
 
 procedure TFichaCamara.BitBtn1Click(Sender: TObject);
 var
 Origen, DestBmp: String;
 begin
 Origen:='C:/Capture.Avi';
 DestBmp:='C:/Rob.BMP';
 if GrabAVIFrame(Origen,5,DestBmp)then
 begin
 Foto.Picture.LoadFromFile(DestBmp);
 Foto.Stretch:= True;
 end;
 end;


Desde ya gracias por la molestia, si saben de donde puedo sacar codigo para pasar de .AVI a .JPG que sea mas legible se los agradeceria.
Saludos a todos.

zugazua2001 08-07-2005 22:12:29

ejecuto la funcion me devuelve true
 
Hola al ejecutar la funcion me devuelve true, pero siempre la misma imagen.
Sigo la traza paso a paso, y todo anda bien, me fije que el número de frame variara y todo bien.
Puede ser algo relacionado con windows Xp, yo antes tenia instalado windows 98 y todo andaba perfecto.
Me ocurre también algo particular cuando corro la aplicación para capturar video con la web cam, corro la aplicación y me aparece un recuadro con valores de registros, en assembler sigo corriendo con F9 se pasa a otra linea de dicho recuadro y continuo hasta que aparece la pantalla principal de la aplicacion.
¿Esto también puede que sea por la versión de Windows, porque esta misma aplicación sobre windows 98 corría perfectamente?.
Bueno si alguien me responde esto se lo agradeceria muchisimo, porque sin esto no puedo seguir avanzando.
Gracias por todo nuevamente.

zugazua2001 09-07-2005 03:44:10

Problemas con pasaje de Avi a Bmp
 
Gracias, necesito solucionar esto porque sino no puedo avanzar.


La franja horaria es GMT +2. Ahora son las 06:00:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi