Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Guardar frame como .bmp?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Guardar frame como .bmp? Responder citando

Saludos:

Soy nuevo en el foro y relativamente en el uso del builder.

Mi problema es que estoy intentando capturar un frame de un video y guardarlo como un .bmp y no encuentro la forma de hacerlo.

Según he leido haria falta trabajar con las directx, pero eso lo veo demasiado complejo para lo que quiero hacer.De hecho el video lo reproduzco con un TMediaPlayer y modificiando el frame de start me muevo sobre el frame que quiero. Ahora simplemente seria guardar ese frame como bmp.
He pensado una manera cutre que sería capturar la pantalla y qedarme con la zona donde esta el frame pero me parece muy muy cutre.

¿Como podría hacerlo?

Muchas Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Guardar Frame como BMP Responder citando

Que tal amigo:

El problema que tienes es facil de resolver, de preferencia has que el media player despliegue el video en un TPanel, para que sea más fácil (propiedad Display).

Para capturar el frame has lo siguiente:

Graphics::TBitmap *CuadroActual = new Graphics::TBitmap;
CuadroActual->Width = pnlVideo->Width - 8; // iguala el tamaño del bitmap al tamaño del panel donde se despliega el video dejando un margen de 4 pixeles por lado
CuadroActual->Height = pnlVideo->Height - 8;
CuadroActual->Canvas->Rectangle(0,0,CuadroActual->Width, CuadroActual->Height); //Dibuja un rectangulo en el bmp
CuadroActual->PixelFormat = pf24bit;

// ... una vez que estés en el frame que quieres...

CuadroActual->Canvas->CopyRect(Rect(0,0, CuadroActual->Width, CuadroActual->Height), Canvas ,
Rect(pnlVideo->Left + 4,pnlVideo->Top + 4, pnlVideo->Width + pnlVideo->Left -4,pnlVideo->Height + pnlVideo->Top -4));

//Ahora solo dale un SaveToFile al bitmap y habras obtenido el frame.

delete CuadroActual;


Si deseas, mandame tu correo a isc_truiz@hotmail.com para que te pase una aplicación que procesa frame por frame una imagen (aunque no las guarda), te puede servir para darte una idea de como manipular frames.

Saludos y espero haberte ayudado

Neko++
_________________
/**********************************/
ISC. Tito Ruiz Sánchez
EMail: isc_truiz@hotmail.com
kintaro_rst@hotmail.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

En primer lugar muchas gracias por tu respeusta Neko++ lo he probao y me va bien.

Ahora....

Si en lugar de guardar la imagen en .bmp la quisiera guardar como .jpg que podría hacer?

Muchas Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:
#include <jpeg.hpp>//incluye la cabecera

TJPEGImage *EnJPG = new TJPEGImage;
   
//ponemos la imagen
EnJPG->Assign(CuadroActual->Picture->Bitmap);
// la grabamos. je
EnJPG->SaveToFile(CuadroActual->Name+".jpg");

delete EnJPG;

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

MUCHISIMAS GRACIAS!!!

Ahora por curiosidad...
Si con esos frames que ya tengo capturados quisiera juntarlos todos para reproducirlos como un video... eso ya seria mas complicado, no?

Lo que he pensado es mostrar las imagenes correlativas pero se notan saltos entre ellas.

Esto que seria juntar los jpgs o bmps en un video ya seria pedir demasiado, no?

(es q tengo una aplicacion que he hecho en matlab y matlab me da la opcion de hacer eso directamente, el solo me junta los frames y me crea el video), aqui creo q no puedo hacerlo, no? En caso de que si... ¿como se podria?


Muchisimas gracias de nuevo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

checa este enlace, esta en japones, o chino, quien, sabe...?
pero,viene el codigo.. y esta facil de implementar..

debes guardar una imagen, como bmp.. posteriormente..
el codigo lo establece como una secuencia de viedo..


http://www.moodindigo.org/blog/archives/000189.html


y este es un componente, para crear video, en c++ builder, no soy muy fanatico de los componentes, me gusta mas hacerlo a puro codigo, aun que me lleve un buen,, jje jej

http://www.mitov.com/Video_Lab_Components/body_videolab.html
saludos
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Muchas Gracias por responder tan rápido.

Voy a echarle un vistazo al codigo pq me hace mas ilusion con codigo q no un componente y ya posteare resultados.


Muchas Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Todo lo que expusieron está bien, pero se me presenta el siguiente problema. Yo necesito capturar un cuadro pero sin que se visualice el video en pantalla. Cuando se visualiza en pantalla puedo capturar el video.
Resulta que deseo capturar antes porque quiero hacer mezclas de videos en tiempo de ejecucion. Favor ayudenme, si alguien sabe como capturar una imagen del video sin que el video se visualice en pantalla
Volver arriba
Mensaje    Asunto: Responder citando

yo tengo el mismo problema
Volver arriba
Mensaje    Asunto: Responder citando

con el mplayer de linux se hace en una linea:

$ mencoder “mf://*.jpg” -mf fps=5 -o video.avi -ovc lavc -lavcopts vcodec=xvid -vf rotate=1

PD: nunca he probado a hacerlo con builder, lo pongo por si no lo solucionas y quieres continuar con tu programa.

Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

lo intente pero no me funciona
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.