Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Capturar frames del TMediaPlayer (https://www.clubdelphi.com/foros/showthread.php?t=1805)

chrisredfield 27-06-2003 21:28:24

Capturar frames del TMediaPlayer
 
Hola a todos.
Quiero capturar algunos frames de un fichero de video que esta ejecutando el TMEdiaPlayer.
¿Como lo hago?.
Habia pensado, una vez posicionado en el frame a grabar, en copiar el frame a un TImage y grabarlo como jpg.
Pero.....¿como accedo al "dibujo" del frame?.
Gracias de antemano.

madriles 29-06-2003 07:03:21

bueno, creo que lo primero que tienes que hacer es que se ejecute el media player en un contenedor que puedas tratar, por ejemplo en un TPanel.
Pon en tu formulario un TPanel (Left y Top := 0 ) y un TImage, luego este codigo donde mas te guste ( OnCreate, OnShow, OnClick...)

with MediaPlayer1 do
begin
Display:=Panel1;
Panel1.Width:=DisplayRect.Right;
Panel1.Height:=DisplayRect.Bottom;
Image1.Height:=Panel1.Height;
Image1.Width:=Panel1.Width;
end;

luego te posicionas en la imagen que quieres grabar y pulsas en un TButton que tengas con este codigo

Image1.Canvas.CopyRect(Image1.ClientRect,Self.Canvas,Panel1.ClientRect);

luego, no te queda mas que salvar la imagen que me temo tendra que ser en bmp y luego tendras que convertirla a jpg

chrisredfield 29-06-2003 15:37:17

Lo he probado, pero aparece todo en negro.
Es decir, lo que captura del tpanel y copio en el timage
es una imagen en negro.
¿donde estara el frame?

madriles 30-06-2003 09:13:27

he estado haciendo la prueba y funciona correctamente, pero tienes que tener en cuenta que lo que copias a TImage no es el contenido del TPanel sino del form, fijate que pone Self.Canvas, por tanto, aunque el clientrect sea el del panel realmente se refiere al formulario de hay que te indique que debe estar en left y top a 0 para evitar las distorsiones. en definitiva es copiar cualquier zona del formulario en la imagen.
de todas formas si sigue sin funcionarte y no sabes a que es debido dimelo y te envio por e-mail un ejemplo.
un saludo

chrisredfield 30-06-2003 13:38:35

Vaya, es curioso. Haré mas pruebas esta noche. Ya te comentare algo. Gracias.

chrisredfield 30-06-2003 13:43:24

Lo he probado ahora en un form nuevo y funciona.
Como lo puse en el programa completo tendria algo por ahi que falla.
Ahora en un programa limpio, funciona!!!.
Gracias.

chrisredfield 01-07-2003 10:05:25

Bueno, eso creo.
Resulta que en casa, lo probe con el Delphi7 y no funciona.
El mismito programa con el Delphi5 si que funciona.
¿Por que sera?.
¿El mediaplayer del delphi7 no manda la imagen
al canvas del form?.
En fin. Tendre que hacerlo con el 5.
La verdad es que es curioso. Si alguien sabe porque, que hable ahora o calle para siempre. Jeje

chrisredfield 01-07-2003 10:11:45

Bueno, parece ser que el delphi7 no es.
He probado con el Delphi7 y tambien funciona. Pero en el pc de mi casa no. Lo unico que se me ocurre es la version del directx y/o el windows medialplayer
Donde funciona tengo instalada las directx 8.1 y el mediaplayer 8.00.00.44.77. Esta noche mirare las versiones del ordenador donde no funciona. ¿que otra cosa podria ser?.

madriles 01-07-2003 12:40:34

me temo que en este tema estoy bastante "pez", pero por logica no debe ser el mediaplayer ni posiblemente el directX.
estamos tratando simplemente con el canvas, y por tanto lo que con el se relacione. si yo copio un trozo de la pantalla, me da lo mismo que venga de un mediaplayer un image o simplemente que tengas tbutton en la zona a copiar, simplemente copia lo que ve.
de todo esto deduzco que al pasar de un ordenador a otro las versiones de Graphics que aparecen en el uses, encuentran algun conflicto.
en teoria :D un ejecutable deberia funcionar sin mas. comprueba pues pasando solo el ejecutable a los ordenadores que tengas y mira a ver si funciona.
lo lamento pero no se me ocurre otra cosa, a ver si los compañeros pueden hecharte una mano

chrisredfield 01-07-2003 21:05:18

He ejecutado el programa ya compilado en mi casa y no funciona.
Asi, que el delphi no tiene nada que ver.
Supongo que sera la tarjeta, los drivers, vete tu a saber.
En casa, tengo las directx9 y el windows mediaplayer 9.
Bueno, si lo consigo ya te lo hare saber. Gracias...

chrisredfield 02-07-2003 23:31:34

Al menos ya he encontrado la causa. ¡¡¡Los drivers de la tarjeta!!.
Iguale el directx y el mediaplayer y seguia fallando, luego solo quedaban los drivers. Arranque el xp con una vga normal, y voala!!!, funciona.
El problema es a ver como explicao todo esto a los de nvidia.
En fin, creo que tendre que arrancar en modo vga normal para generar los thumbnails.
El caso es que estoy haciendo un programa para ordenar y catalogar videos, generando una serie de thumbnails por clip.
El Acdsee solo genera el primer fotograma del video, que sirve de poco.
En mi programa, seleccionas un directorio, y te genera varios thumbnails (configurables) por cada uno de los videos.
Luego tengo pensado en hacer un browser de los directorios catalogados. Si la cosa queda bien, tengo pensado colgarlo todo en esta web para que entre todos lo mejoremos.
Pero eso si....no funciona con gforce ti 4200. :(
Bueno.....por ahora....

ingel 20-09-2011 14:18:35

Hola.. no se si activar un hilo tan antiguo sera correcto , pero es justamente el problema que tengo .. puntualmente tengo un video reproduciendose en el tmediaplayer que esta contenido en un panel (mas pequeño que el form principal) y coloque un Timage DENTRO del panel( panel4 ) con el mismo tamaño y la propiedad Stretch en true y autosize en false..
La captura la realiza pero me toma la imagen desde la coord 0,0 del FORM1 y no del panel4 que es donde esta el video..
He aqui el codigo
Código:



IF Opendialog1.execute then begin
 Mediaplayer1.filename:= opendialog1.filename;
 Mediaplayer1.Open;
 Mediaplayer1.Display:= panel4;
 Image1.Height:=Panel4.Height;
 Image1.Width:=Panel4.Width;
 MediaPlayer1.DisplayRect := Rect(0, 0, panel4.Width, panel4.Height);
 Mediaplayer1.Play

 Image1.Canvas.CopyRect(Image1.ClientRect,Self.Canvas,Panel4.ClientRect);
 Image1.Picture.SaveToFile('d:\temp\foto.jpg');

end;

Gracias y sds

beginner01 20-09-2011 19:52:21

Captura con TMediaPlayer
 
Saludos.

Prueba este código que encontré en la página de Experts Exchange, a ver si es lo que nesesitas


Código Delphi [-]
//uses Jpeg;
procedure TForm1.Capturar;
var
  BMP : TBitmap;
  ADC : HDC;
  GetPoint : TPoint;
  MyJpeg: TJpegImage;
begin
  BMP := TBitmap.Create;
  BMP.Height := Panel1.Height;
  BMP.Width := Panel1.Width; // it is also the size of Panel1
  MediaPlayer1.TimeFormat := tfFrames;
  //MediaPlayer1.Display := Panel1;
  GetPoint := Panel1.ClientToScreen(Point(0,0));
  ADC := GetDC(0);
  //MediaPlayer1.Position := FrameNumberToCapture;
  Application.ProcessMessages;
  Bitblt(BMP.Canvas.Handle, 0,0,
             BMP.Width,BMP.Height,
             ADC, GetPoint.X, GetPoint.Y, SRCCOPY);

  MyJpeg:= TJpegImage.Create;
  MyJpeg.Assign(BMP);
  MyJpeg.SaveToFile('D:\Temp\Captura.JPG');
end;

Cambia Panel1 por el que usas para visualizar el video.


La franja horaria es GMT +2. Ahora son las 04:30:09.

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