|
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="cs">
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">Magické zrcadlo (Vala)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="vala#examples"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Jak použít svoji webovou kameru jako zrcadlo pomocí základního rámce GStreamer a 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 |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>Magické zrcadlo</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<synopsis>
|
|
Packit |
1470ea |
Spadlo vám ze zdi zrcadlo a rozbilo se na tisíc kousků a vy se zrovna nutně potřebujete oholit nebo si udělat make-up! A máte jen 15 minut, než vám pojede autobus do práce. Co teď?
|
|
Packit |
1470ea |
V této lekci napíšeme program, který vám umožní používat webovou kameru jako zrcadlo. Naučíte se tyto věci:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Vytvořit aplikaci GTK+ </item>
|
|
Packit |
1470ea |
<item>Přistupovat k webové kameře pomocí knihovny GStreamer a výsledek vložit do okna </item>
|
|
Packit |
1470ea |
<item>Pořídit fotografie vaší webovou kamerou </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
Abyste mohli pokračovat v této lekci, budete potřebovat následující:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Nainstalovanou kopii <link xref="getting-ready">IDE Anjuta</link> </item>
|
|
Packit |
1470ea |
<item>Nainstalované kopie knihoven GTK a Gstreamer a kompilátoru jazyka Vala </item>
|
|
Packit |
1470ea |
<item>Základní znalosti o objektově orientovaných programovacích jazycích </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>Vytvoření projektu ve studiu Anjuta</title>
|
|
Packit |
1470ea |
Než začnete s kódováním, musíte ve studiu Anjuta vytvořit nový projekt. Tím se vytvoří všechny soubory, které budete později potřebovat k sestavení a spuštění kódu. Je to také užitečné kvůli udržení všeho pohromadě.
|
|
Packit |
1470ea |
<steps>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Spusťte IDE Anjuta a klikněte na <guiseq><gui>Soubor</gui> <gui>Nový</gui> <gui>Projekt</gui></guiseq>, aby se otevřel průvodce projektem.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Na kartě <gui>Vala</gui> zvolte <gui>GTK+ (jednoduchý)</gui>. Klikněte na <gui>Pokračovat</gui> a na několika následujících stránkách vyplňte své údaje. Jako název projektu a složky použijte <file>maginc-mirror</file>.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Ujistěte se, že <gui>Použít GtkBuilder k tvorbě uživatelského rozhraní</gui> je vypnuto, protože jej chceme v této lekci vytvořit ručně. Na použití návrháře uživatelského rozhraní se podívejte do lekce <link xref="guitar-tuner.vala">Kytarová ladička</link>.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Ujistěte se, že <gui>Konfigurovat externí balíčky</gui> je zapnuto. Na následující stránce vyberte v seznamu gstreamer-0.10, aby se knihovna GStreamer zahrnula do vašeho projektu.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Klikněte na <gui>Použít</gui> a vytvoří se vám projekt. Otevřete <file>src/magic_mirror.vala</file> na kartě <gui>Projekt</gui> nebo <gui>Soubor</gui>. Měli byste vidět kód, který začíná řádky:
|
|
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>Prvotní sestavení kódu</title>
|
|
Packit |
1470ea |
Kód načte (prázdné) okno ze souboru s popisem uživatelského rozhraní a zobrazí jej. Dále to podrobněji rozebereme. Pokud jste již pochopili základy, tak tento seznam můžete přeskočit:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Dva řádky using importují jmenné prostory, takže je nebudeme muset výslovně uvádět.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Konstruktor třídy Main vytvoří nové okno a nastaví jeho název pro záhlaví. Potom je okno zobrazeno a je napojen signál, který ukončí aplikaci, když je okno zavřeno. Více o signálech si řekneme později.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Statická funkce main se spustí jako výchozí, když spustíte aplikaci napsanou v jazyce Vala. Volá pár funkcí, které vytvoří třídu Main a nastaví a spustí aplikaci. Funkce Gtk.main spustí hlavní smyčku GTK, která spustí uživatelské rozhraní a začne naslouchat událostem (jako je kliknutí nebo zmáčknutí klávesy).
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Kód je připravený k použití, takže jej můžete zkompilovat kliknutím na <guiseq><gui>Sestavit</gui> <gui>Sestavit projekt</gui></guiseq> (nebo zmáčknutím <keyseq><key>Shift</key> <key>F7</key></keyseq>).
|
|
Packit |
1470ea |
Změňte <gui>Konfiguraci</gui> na <gui>Výchozí</gui> a klikněte na <gui>Spustit</gui>, aby se nakonfigurovala složka, ve které se provádí sestavení. Stačí to udělat jen jednou, pro první sestavení.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="webcam">
|
|
Packit |
1470ea |
<title>Přístup pomocí GStreamer k vysílání videa z webové kamery</title>
|
|
Packit |
1470ea |
Základní multimediální konstrukce GStreamer umí zpracovávat video z webových kamer. Pojďme přidat GStreamer do naší aplikace a můžeme pak přistupovat k videovysílání.
|
|
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>Nejprve odstraníme okno, které jsem před tím vytvořili, protože GStreamer se o zobrazení obrázku na obrazovce postará.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
Nyní vytvoříme prvek GStreamer, který zajistí přístup k webové kameře. Použijeme prvek Camerabin, což je prvek „vše v jednom“ – umí pořizovat fotky, videonahrávky, na vše nasadit efekty a mnoho dalšího. Pro naše použití přímo ideální. Pomocí this.camerabin.set_state (Gst.State.PLAYING) řekneme rouře, že to co jsme právě vytvořili, má začít s přehráváním. Snadné ne?
|
|
Packit |
1470ea |
Mohli bychom samozřejmě video integrovat těsněji s dalšími okny, ale to je již pokročilé téma zahrnující podrobnosti o systému X Window, do čehož se zde pouštět nebudeme.
|
|
Packit |
1470ea |
Kód znovu přeložte a spusťte. Měli byste skončit se dvěma okny. V dalším kroku začleníme video do okna GTK+.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</steps>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="impl">
|
|
Packit |
1470ea |
<title>Ukázková implementace</title>
|
|
Packit |
1470ea |
Pokud v této lekci narazíte na nějaké problémy, porovnejte si svůj kód s tímto <link href="magic-mirror/magic-mirror.vala">ukázkovým kódem</link>. Je zde i <link href="magic-mirror/magic-mirror-advanced.vala">rozsáhlejší realizace</link>, která vkládá okno do běžného Gtk.Windows, což zahrnuje některé pokročilé techniky a přidává tlačítka pro spuštění/zastavení obrázků.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="further">
|
|
Packit |
1470ea |
<title>Co dalšího si přečíst</title>
|
|
Packit |
1470ea |
Jestli si chcete o programování v jazyce Vala najít něco více, můžete se podívat na <link href="http://live.gnome.org/Vala/Tutorial">výuku jazyka Vala</link>.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="conclusion">
|
|
Packit |
1470ea |
<title>Závěr</title>
|
|
Packit |
1470ea |
A je to, podařilo se vám vytvořit plně funkční aplikaci s webovou kamerou během 15 minut. Nyní se můžete oholit a udělat si make-up na svoji krásnou tvář před tím, něž strávíte hezký den ve své práci, kde můžete oslnit své přátele a kolegy úžasnou aplikací, kterou jste právě za 15 minut stvořili.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</page>
|