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 Pantalla = Pantalla negra (https://www.clubdelphi.com/foros/showthread.php?t=54682)

DarkDudae 27-03-2008 12:57:49

Capturar Pantalla = Pantalla negra
 
Hola a todos, tengo una aplicación en la que en un cuadro del formulario, se reproduce un video usando los componentes DSPack.

Cuando intento hacer una captura de pantalla de esta aplicación mediante código, obtengo una imagen perfecta, salvo el recuadro donde se reproduce el vídeo, que aparece en negro debido al overlay del mismo (DirectX).

Tengo componentes del propio DSPack para capturar imagenes de un vídeo, pero claro, en ese caso sólo me captura la imagen del vídeo en sí, no del formulario completo.

A ver si alguno conoce un método para hacer una captura completa de la pantalla que funcione con vídeos.

Muchas gracias

MAXIUM 27-03-2008 14:30:02

Imagino que con video no te refieres a video juego.

Abrelo con VirtualDub y presiona la tecla print o impr pant. Luego vas a tu editor de imagenes favorito (mspaint por ejemplo) y pegas.

Tambien puedes usar HyperSnap-DX

DarkDudae 27-03-2008 15:13:11

Gracias por responder, aunque si relees mi post, te darás cuenta, de que lo que me interesa, no es capturar un frame del vídeo (sí, no se trata de videojuegos), sino el formulario completo en el que se reproduce el vídeo. Por lo tanto, la opción del virtualdub no me vale.

La solución de utilizar programas externos tampoco me es útil, ya que la idea es poder capturar desde el propio programa.

Saludos

xEsk 27-03-2008 15:35:43

Hola, por mi experiencia en casos así (que no son muchos xD) capturar frames de vídeos usando el método "Impr Pant" u otros es prácticamente imposible...

Pero la solución que se me ocurre de forma rápida (y porqué no decirlo, chapucera), es capturar la pantalla de la misma forma que lo haces ahora y por separado capturar el frame del video con lo qué el componente te ofrece. Luego lo ajuntas tú (de forma programada, no manual xD) antes de mostrar la imagen final.

Problemas que se pueden presentar:
- Que si la ventana no esta al frente de todo, pues salga un churro enorme si "pegas" el frame en la posición que teóricamente debería estar... xD

Se que la solución es una enoooorme chapuza, pero es lo primero que se me ha ocurrido xD

Saludos.

Mick 27-03-2008 17:00:19

Hombre capturar las imagenes por separado no es tanta chapuza, porque en realidad las dos imagenes no estan juntas en ningun lado salvo en el monitor, de eso se trata el overlay, es decir la tarjeta de video en el ultimo momento antes de enviar la imagen al monitor superpone las dos cosas el video y la imagen del escritorio.

Saludos

DarkDudae 27-03-2008 19:09:32

Es una opción, aunque me ha sorprendido muchísimo no encontrar una solución más simple al problema. Nunca me ha gustado usar el componente de captura del DSPack (llamado DSGrabber), ya que el consumo de CPU a la hora de la reproducción se dispara en el momento en el que lo conectas al stream de video, pero puede ser la única opción.

Gracias a todos por las ideas.

Lois 25-04-2008 13:41:39

Hola DarkDudae!Estoy más o menos como tú. Estoy intentando hacer una aplicación que 'clone' mi escritorio y lo mande a pantalla completa a otro ordenador en red, para poder hacer demostraciones y demás, y el último problema que me he encontrado es precisamente ese, el video...consigo ver videos de youtube, veoh, webcam...pero cuando abro un video de mi ordenador con cualquier reproductor me encuentro la pantalla en negro.

Habia pensado que quizás era problema de la frecuencia de refresco al mandar la imagen, pero nada. He leído algo de DSPack y he tratado de instalarlo, pero uso delphi 5 y por lo visto es para delphi7...alguna idea o solucion alternativa?

Gracias

DarkDudae 25-04-2008 20:07:14

Hola Lois.

Antes de nada, comentarte que el DSpack, sí que puede instalarse en D5 sin ningún problema. De todas formas, y por lo que me comentas, no te serviría para nada, ya que una cosa es capturar un frame usando un control dentro de tus propios formularios y otra muy distinta hacerlo a nivel de escritorio.

El mayor problema es el overlay del vídeo, que utiliza la aceleración de la gráfica. El vídeo no se renderiza en la misma capa que el resto de la pantalla, de ahí que aparezca en negro.

Cuando buscaba solución a este problema, encontré un par de opcioneos que tal vez te sirvan:

1ª) Usar un programa específico de captura(ahora mismo no recuerdo el nombre, aunque si lo necesitas, el lunes cuando vuelva al trabajo te lo puedo mirar). Este programa, lo que hacía, era instalarte un filtro DirectShow, que desactivaba la aceleración del vídeo interponiéndose antes del Renderer final. No obstante, en mi caso, esta opción no era viable por la perdida de rendimiento que suponía, y porque, además, requería de instalación de este programa de terceros que además, no era gratuito.

2ª) Desactivar tu mismo directamente la aceleración de la gráfica, con la cosiguiente pérdida de rendimiento. Supongo que esta desactivación puede efectuarse mediante código. Tal vez esta sea la mejor solución para el caso que planteas.

Saludos

dpg_2006 27-10-2008 12:29:36

Captura de Video
 
Mira DSPack es basado en Directshow por eso no lo puedes capturar, sencillamente usa un reproductor que sea basado en VFW y verás que todo te funcionará, Virtual DUB permite la captura con PrintScreen o con GetWindowDC porque es basado en VFW(Video for windows).....


La franja horaria es GMT +2. Ahora son las 14:54:29.

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