![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
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? |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
Vaya, es curioso. Haré mas pruebas esta noche. Ya te comentare algo. Gracias.
|
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
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 |
#8
|
|||
|
|||
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?. |
#9
|
|||
|
|||
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 ![]() lo lamento pero no se me ocurre otra cosa, a ver si los compañeros pueden hecharte una mano |
#10
|
|||
|
|||
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... |
#11
|
|||
|
|||
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.... |
#12
|
|||
|
|||
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; |
#13
|
|||
|
|||
Captura con TMediaPlayer
Saludos.
Prueba este código que encontré en la página de Experts Exchange, a ver si es lo que nesesitas
Cambia Panel1 por el que usas para visualizar el video. |
![]() |
|
|
![]() |
|