PDA

Ver la versión completa : [Programacion] Capturar pantalla de una aplicacion



Karkayu
26/09/2007, 15:02
Buenas:

Necesito implementar la función de crear Sreenshots en una aplicación que estoy haciendo y no tengo ni idea. La cosa seria pulsar una tecla y capturar el contenido de pantalla que esta mostrando la aplicación.
Qué usais vosotros para hacer eso?? (alguna libreria, trozo de código...). Uso C bajo Linux.

Somebody help me??? :D

Un saludo
:brindis:

< - >
Un pequeño :arriba:

< - >
No me puedo creer que con tantos programadores que hay por aqui nadie sepa algo :(

Hago un ultimo :arriba:

DarkDijkstra
26/09/2007, 16:07
Supongo que el programa implicar&#225; interfaz gr&#225;fica y tal... y ya que dices C y linux apostar&#237;a por GTK y tal, pero vamos, podr&#237;as especificar un pelin m&#225;s que estas usando y que necesitas?
Siempre puedes ejecutar xwd que captura la pantalla en entornos de X-Window (da igual que tengas KDE, Gnome, XFCE...) es un comando del sistema, pero podr&#237;as meterlo en tu c&#243;digo con un simple "system"

http://www.xfree86.org/current/xwd.1.html (pagina del manual)

asi, simplemente con un

system("xwd <par&#225;metros>");

lo tendr&#237;as, eso si, los par&#225;metros tocar&#225; investigarlos un poquito ; )

Karkayu
26/09/2007, 16:12
Supongo que el programa implicar&#225; interfaz gr&#225;fica y tal... y ya que dices C y linux apostar&#237;a por GTK y tal, pero vamos, podr&#237;as especificar un pelin m&#225;s que estas usando y que necesitas?
Siempre puedes ejecutar xwd que captura la pantalla en entornos de X-Window (da igual que tengas KDE, Gnome, XFCE...) es un comando del sistema, pero podr&#237;as meterlo en tu c&#243;digo con un simple "system"

http://www.xfree86.org/current/xwd.1.html (pagina del manual)

asi, simplemente con un

system("xwd <par&#225;metros>");

lo tendr&#237;as, eso si, los par&#225;metros tocar&#225; investigarlos un poquito ; )

La aplicacion es en OpenGL. Es un Pseudo-editor 3D. Lo que me gustaria es implementar la tipica opcion de sacar un screenshot .png (o .gif o lo que sea) del contenido del editor (pulsando una tecla, por ejemplo).

La idea es que sea lo mas portable posible (aunque si no queda mas remedio, tirar&#237;a para Linux m&#225;s que para Windows).

Muchas gracias por tu respuesta.

Un saludo
:brindis:

DarkDijkstra
26/09/2007, 16:23
Hombre, siempre puedes coger "a pelo" la memoria de v&#237;deo (no se como estar&#225;s trabajando con OpenGL exactamente, pero seguro que puedes obtener un puntero al framebuffer de la ventana, asumiendo que crees una ventana y "pintes" todo dentro de ella con llamadas a OpenGL) y volcarla a un fichero, eso si, estar&#237;a en formato "raw", lo mejor ser&#237;a usar alguna librer&#237;a gr&#225;fica m&#225;s o menos est&#225;ndar para grabar esa informaci&#243;n en formato png o lo que sea...
&#191;por casualidad est&#225;s usando SDL o algo similar?

Karkayu
26/09/2007, 17:06
Hombre, siempre puedes coger "a pelo" la memoria de vídeo (no se como estarás trabajando con OpenGL exactamente, pero seguro que puedes obtener un puntero al framebuffer de la ventana, asumiendo que crees una ventana y "pintes" todo dentro de ella con llamadas a OpenGL) y volcarla a un fichero, eso si, estaría en formato "raw", lo mejor sería usar alguna librería gráfica más o menos estándar para grabar esa información en formato png o lo que sea...
¿por casualidad estás usando SDL o algo similar?


Ahi es donde tengo el problema. El framebuffer no se convertirlo a un formato "conocido" (.gif, .png, .jpg ...), por eso preguntaba :D

No uso SDL. Solo C y Glut/OGL. De todas formas, si hay algo que se pueda hacer con SDL, comentalo por que, la verdad, es que estoy algo desesperadillo ya [wei6]

Un saludo
:brindis:

DarkDijkstra
26/09/2007, 18:37
Hombre, hace un mont&#243;n que no programo nada con SDL, pero puedes hacer cosas con OpenGL y SDL se encarga del "trabajo sucio" con la gesti&#243;n de ventanas, rat&#243;n, etc (lo que ahora har&#225;s con Glut).
La verdad es que a mi me parece m&#225;s amigable que Glut, y la ventaja es que tiene muchas funciones para cargar / grabar im&#225;genes y como todo en el fondo son "surfaces" (tanto una im&#225;gen, como el framebuffer y tal) no deber&#237;as tener mucho problema con lo que necesitas.
Pero vamos, es mi consejo, si llevas el proyecto muy avanzado y cambiarlo todo te resultar&#237;a muy molesto, lo mejor ser&#237;a buscar alguna librer&#237;a lo m&#225;s sencilla posible que sea multiplataforma y te permita escribir a fichero.
O claro, te queda la soluci&#243;n "hardcore" que ser&#237;a escribir en fichero tu mismo la cabecera de un formato, hacer la conversi&#243;n de la informaci&#243;n, etc etc ; P

Karkayu
26/09/2007, 18:56
Hombre, hace un montón que no programo nada con SDL, pero puedes hacer cosas con OpenGL y SDL se encarga del "trabajo sucio" con la gestión de ventanas, ratón, etc (lo que ahora harás con Glut).
La verdad es que a mi me parece más amigable que Glut, y la ventaja es que tiene muchas funciones para cargar / grabar imágenes y como todo en el fondo son "surfaces" (tanto una imágen, como el framebuffer y tal) no deberías tener mucho problema con lo que necesitas.
Pero vamos, es mi consejo, si llevas el proyecto muy avanzado y cambiarlo todo te resultaría muy molesto, lo mejor sería buscar alguna librería lo más sencilla posible que sea multiplataforma y te permita escribir a fichero.
O claro, te queda la solución "hardcore" que sería escribir en fichero tu mismo la cabecera de un formato, hacer la conversión de la información, etc etc ; P

Gracias por tu aportacion. Voy a ver que hago...

Un saludo
:brindis: