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ď?
V této lekci napíšeme program, který vám umožní používat webovou kameru jako zrcadlo. Naučíte se tyto věci:
Vytvořit aplikaci GTK+
Přistupovat k webové kameře pomocí knihovny GStreamer a výsledek vložit do okna
Pořídit fotografie vaší webovou kamerou
Abyste mohli pokračovat v této lekci, budete potřebovat následující:
Nainstalovanou kopii IDE Anjuta
Nainstalované kopie knihoven GTK a Gstreamer a kompilátoru jazyka Vala
Základní znalosti o objektově orientovaných programovacích jazycích
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ě.
Spusťte IDE Anjuta a klikněte na
Na kartě
Ujistěte se, že
Ujistěte se, že
Klikněte na
using GLib;
using Gtk;
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:
Dva řádky using
importují jmenné prostory, takže je nebudeme muset výslovně uvádět.
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.
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).
Kód je připravený k použití, takže jej můžete zkompilovat kliknutím na
Změňte
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í.
using GLib;
using Gtk;
public class Main : Object
{
private Gst.Element camerabin;
public Main () {
this.camerabin = Gst.ElementFactory.make ("camerabin", "camera");
this.camerabin.set_state (Gst.State.PLAYING);
}
static int main (string[] args) {
Gtk.init (ref args);
Gst.init (ref args);
var app = new Main ();
Gtk.main ();
return 0;
}
}
Nejprve odstraníme okno, které jsem před tím vytvořili, protože GStreamer se o zobrazení obrázku na obrazovce postará.
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?
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.
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+.
Pokud v této lekci narazíte na nějaké problémy, porovnejte si svůj kód s tímto ukázkovým kódem. Je zde i rozsáhlejší realizace, 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ů.
Jestli si chcete o programování v jazyce Vala najít něco více, můžete se podívat na výuku jazyka Vala.
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.