|
Packit |
1470ea |
|
|
Packit |
1470ea |
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="magic-mirror.vala" xml:lang="es">
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">Espejo mágico (Vala)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="vala#examples"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Utilice su cámara web como un espejo usando el entorno de trabajo GStreamer y GTK+</desc>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<revision pkgversion="0.1" version="0.1" date="2011-03-19" status="review"/>
|
|
Packit |
1470ea |
<credit type="author">
|
|
Packit |
1470ea |
<name>Daniel G. Siegel</name>
|
|
Packit |
1470ea |
<email its:translate="no">dgsiegel@gnome.org</email>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
<credit type="author">
|
|
Packit |
1470ea |
<name>Johannes Schmid</name>
|
|
Packit |
1470ea |
<email its:translate="no">jhs@gnome.org</email>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
<credit type="editor">
|
|
Packit |
1470ea |
<name>Marta Maria Casetti</name>
|
|
Packit |
1470ea |
<email its:translate="no">mmcasetti@gmail.com</email>
|
|
Packit |
1470ea |
<years>2013</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Daniel Mustieles</mal:name>
|
|
Packit |
1470ea |
<mal:email>daniel.mustieles@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011 - 2017</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Nicolás Satragno</mal:name>
|
|
Packit |
1470ea |
<mal:email>nsatragno@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2012 - 2013</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Jorge González</mal:name>
|
|
Packit |
1470ea |
<mal:email>jorgegonz@svn.gnome.org</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>Espejo mágico</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<synopsis>
|
|
Packit |
1470ea |
Su espejo se ha caído al suelo y se ha roto en miles de pedazos; pero necesita un espejo para afeitarse o para maquillarse. Solo tiene 15 minutos antes de coger el autobús para ir al trabajo. ¿Qué puede hacer?
|
|
Packit |
1470ea |
En este tutorial se va a hacer un programa que le permite usar su cámara web como un espejo. Aprenderá a:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Crear una aplicación GTK+ </item>
|
|
Packit |
1470ea |
<item>Acceder a su cámara web usando GStreamer y empotrar el resultado en una ventana </item>
|
|
Packit |
1470ea |
<item>Obtener las fotos de su cámara web </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
Necesitará lo siguiente para poder seguir este tutorial:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Una copia instalada del <link xref="getting-ready">EID Anjuta</link> </item>
|
|
Packit |
1470ea |
<item>Copias instaladas de GTK, GStreamer y de un compilador de Vala </item>
|
|
Packit |
1470ea |
<item>Conocimientos básico de un lenguaje de programación orientado a objetos </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</synopsis>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/magic-mirror.png"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="anjuta">
|
|
Packit |
1470ea |
<title>Crear un proyecto en Anjuta</title>
|
|
Packit |
1470ea |
Antes de empezar a programar, deberá configurar un proyecto nuevo en Anjuta. Esto creará todos los archivos que necesite para construir y ejecutar el código más adelante. También es útil para mantener todo ordenado.
|
|
Packit |
1470ea |
<steps>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Inicie Anjuta y pulse <guiseq><gui>Archivo</gui><gui>Nuevo</gui><gui>Proyecto</gui></guiseq> para abrir el asistente de proyectos.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Elija <gui>GTK+ (simple)</gui> de la pestaña <gui>Vala</gui>, pulse <gui>Adelante</gui> y rellene los detalles en las siguientes páginas. Use <file>espejo-magico</file> como nombre de proyecto y de carpeta.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Desactive la opción <gui>Usar GtkBuilder para la interfaz del usuario</gui>, ya que, en este tutorial, la interfaz de usuario se creará manualmente. Revise el tutorial <link xref="guitar-tuner.vala">afinador-guitarra</link> usando el constructor de interfaces.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Asegúrese de que <gui>Configurar paquetes externos</gui> está seleccionada. En la siguiente página, seleccione gstreamermm-0.10 de la lista para incluir la biblioteca <app>GStreamer</app> en su proyecto.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Pulse <gui>Aplicar</gui> y se creará el proyecto. Abra <file>src/espejo-magico.vala</file> desde las pestañas <gui>Proyecto</gui> o <gui>Archivo</gui>. Debería ver algo de código que comience con las líneas:
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
using GLib;
|
|
Packit |
1470ea |
using Gtk;
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</steps>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="build">
|
|
Packit |
1470ea |
<title>Construir el código por primera vez</title>
|
|
Packit |
1470ea |
El código carga una ventana (vacía) y la muestra. A continuación hay más detalles; omita esta lista si entiende los conceptos básicos:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Las dos líneas using importan espacios de nombres, por lo que no hay que nombrarlas explícitamente.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
El constructor de la clase Main crea una ventana nueva y establece su título. Después se muestra la ventana y se conecta una señal que cierra la aplicación si se cierra la ventana. Se verán más señales más adelante.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
La función estática main se ejecuta de manera predeterminada cuando inicia una aplicación en Vala. Llama a unas pocas funciones que crean la clase «Main», la configuran y ejecutan la aplicación. La función Gtk.Main inicia el bucle principal de GTK+, que ejecuta la interfaz de usuario y empieza a escuchar eventos (como pulsaciones del ratón y del teclado).
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Este código está listo para usarse, por lo que puede compilarlo pulsando <guiseq><gui>Construir</gui><gui>Construir proyecto</gui></guiseq> (o pulsando <keyseq><key>Mayús</key><key>F7</key></keyseq>).
|
|
Packit |
1470ea |
Cambie la <gui>Configuración</gui> a <gui>Predeterminada</gui> y pulse <gui>Ejecutar</gui> para configurar la carpeta de construcción. Sólo necesita hacer esto una vez, para la primera construcción.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="webcam">
|
|
Packit |
1470ea |
<title>Acceder al flujo de vídeo de la cámara web con GStreamer</title>
|
|
Packit |
1470ea |
El entorno multimedia de trabajo GStreamer es capaz de manejar vídeo desde cámaras web. Añada GStreamer a su aplicación y podrá acceder al flujo de vídeo.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
using GLib;
|
|
Packit |
1470ea |
using Gtk;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
public class Main : Object
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
private Gst.Element camerabin;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
public Main () {
|
|
Packit |
1470ea |
this.camerabin = Gst.ElementFactory.make ("camerabin", "camera");
|
|
Packit |
1470ea |
this.camerabin.set_state (Gst.State.PLAYING);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static int main (string[] args) {
|
|
Packit |
1470ea |
Gtk.init (ref args);
|
|
Packit |
1470ea |
Gst.init (ref args);
|
|
Packit |
1470ea |
var app = new Main ();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Gtk.main ();
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
return 0;
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<steps>
|
|
Packit |
1470ea |
<item>Primero se quita la ventana creada anteriormente, ya que GStreamer se encargará de mostrar la imagen en la pantalla.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Ahora se va a crear un elemento de GStreamer que accede a la cámara web. Se va a usar el elemento «Camerabin», que es un elemento de cámara todo en uno capaz de hacer fotos, vídeos, aplicar efectos y mucho más. Perfecto para nuestro caso de uso. Con this.camerabin.set_state (Gst.State.PLAYING) se indica a la tubería de GStreamer que se acaba de crear que empiece a reproducir. Fácil, ¿no?
|
|
Packit |
1470ea |
Por supuesto, también es posible integrar el vídeo más ajustadamente en otras ventanas, pero esto es un tema avanzado que incluye algunos detalles sobre el sistema «X-Window» que aquí se omiten.
|
|
Packit |
1470ea |
Compile y ejecute de nuevo. Acabará teniendo dos ventanas. En el siguiente paso, se integrará el vídeo en una ventana de GTK+.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</steps>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="impl">
|
|
Packit |
1470ea |
<title>Implementación de referencia</title>
|
|
Packit |
1470ea |
Si tiene problemas con este tutorial, compare su código con este <link href="magic-mirror/magic-mirror.vala">código de referencia</link>. También hay una <link href="magic-mirror/magic-mirror-advanced.vala">implemnetación más amplia</link> que empotra la ventana en una ventana GTK regular que implica algunas técnicas avanzadas, y añade botones para iniciar/parar la imagen.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="further">
|
|
Packit |
1470ea |
<title>Lectura complementaria</title>
|
|
Packit |
1470ea |
Para obtener más información sobre el lenguaje de programación Vala, puede querer revisar el <link href="http://live.gnome.org/Vala/Tutorial">tutorial de Vala</link>.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="conclusion">
|
|
Packit |
1470ea |
<title>Conclusión</title>
|
|
Packit |
1470ea |
Ya está, ha conseguido crear una aplicación de cámara web con todas las funciones de fotos en 15 minutos. Ahora puede afeitarse la barba o maquillar su bonita cara justo antes de tener un gran día en su trabajo, donde puede impresionar a sus amigos y colegas con una impresionante aplicación que ha hecho en 15 minutos.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</page>
|