# Μαγικός καθρέπτης (Vala)

Χρήση της κάμερας σας ως καθρέφτη χρησιμοποιώντας τον σκελετό GStreamer και GTK+
Daniel G. Siegel
dgsiegel@gnome.org
Johannes Schmid
jhs@gnome.org
Marta Maria Casetti
mmcasetti@gmail.com 2013
Ελληνική μεταφραστική ομάδα GNOME
team@gnome.gr 2012-2015
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013
Μαρία Θουκιδίδου
marablack3@gmail.com 2014
Θάνος Τρυφωνίδης
tomtryf@gmail.com 2014, 2015

# Μαγικός καθρέπτης

      Ο καθρέφτης σας μόλις έπεσε από τον τοίχο και έσπασε σε χίλια κομμάτια - αλλά χρειάζεται ένας καθρέπτης να ξυρίσετε τη γενειάδα σας και να προσθέσετε κάποια καλλυντικά! Σας απομένουν 15 λεπτά πριν να προλάβετε το λεωφορείο για τη δουλειά. Τι μπορείτε να κάνετε;
      Σε αυτόν τον οδηγό, θα φτιάξουμε ένα πρόγραμμα που επιτρέπει τη χρήση της ιστοκάμεράς σας ως καθρέπτη. Θα μάθετε πώς να:

        Δημιουργήσετε μια εφαρμογή σε GTK+
        Έχετε πρόσβαση στην ιστοκάμερά σας χρησιμοποιώντας GStreamer και πως να ενσωματώνετε το αποτέλεσμα σε ένα παράθυρο
        Πάρετε φωτογραφίες με την ιστοκάμεράς σας

      Θα χρειαστείτε τα παρακάτω για να μπορέσετε να ακολουθήσετε αυτό το μάθημα:

        Ένα εγκατεστημένο αντίγραφο του Anjuta IDE
        Εγκατεστημένα αντίγραφα του GTK, GStreamer και ένα μεταγλωττιστή Vala
        Βασική γνώση μιας αντικειμενοστραφούς γλώσσας προγραμματισμού

# Δημιουργία έργου με το Anjuta

Πριν ξεκινήσετε να προγραμματίζετε, πρέπει να δημιουργήσετε ένα καινούργιο έργο στο Anjuta. Έτσι θα δημιουργηθούν όλα τα απαραίτητα αρχεία που χρειάζονται για την εκτέλεση του κώδικα αργότερα. Επίσης θα ήταν χρήσιμο να τα κρατάτε όλα μαζί.

Ξεκινήστε το Anjuta και πατήστε αρχείονέοέργο για να ανοίξετε τον οδηγό του έργου.

Επιλέξτε GTK+ (απλό) από την καρτέλα Vala, πατήστε μπροστά και συμπληρώστε τις λεπτομέρειές σας στις επόμενες σελίδες. Χρησιμοποιήστε ως όνομα του έργου και του καταλόγου το magic-mirror.

Απενεργοποιήστε το Χρήση του GtkBuilder για διεπαφή χρήση επειδή θα φτιάξουμε τη διεπαφή χρήστη χειροκίνητα σε αυτό το παράδειγμα. Σημειώστε το μάθημα ρυθμιστής κιθάρας χρησιμοποιώντας τον κατασκευαστή διεπαφής.

Βεβαιωθείτε ότι το ρύθμιση εξωτερικών πακέτων επιλέχτηκε. Στην επόμενη σελίδα, επιλέξτε gstreamer-0.10 από τη λίστα για συμπερίληψη της βιβλιοθήκης GStreamer στο έργο σας.

Πατήστε εφαρμογή και το έργο θα δημιουργηθεί. Ανοίξτε src/magic_mirror.vala από τις καρτέλες έργο ή αρχείο. Θα πρέπει να δείτε κάποιο κώδικα που ξεκινά με τις γραμμές:

using GLib; using Gtk;

# Κατασκευάστε τον κώδικα για πρώτη φορά

Ο κώδικας φορτώνει ένα (κενό) παράθυρο και το εμφανίζει. Περισσότερες πληροφορίες υπάρχουν πιο κάτω· προσπεράστε αυτή τη λίστα αν καταλαβαίνετε τα βασικά:

Οι δύο γραμμές `using` εισάγουν χώρους ονομάτων έτσι ώστε να μην τους ονομάσουμε ρητά.

Ο κατασκευαστής της κλάσης `Main` δημιουργεί ένα νέο παράθυρο και ορίζει τον τίτλο του. Κατόπιν εμφανίζεται το παράθυρο και ένα σήμα συνδέεται που εγκαταλείπει την εφαρμογή, εάν το παράθυρο κλείσει. Περισσότερα για τα σήματα αργότερα.

Η στατική συνάρτηση `main` τρέχει από προεπιλογή όταν ξεκινάτε μια εφαρμογή Vala. Καλεί λίγες συναρτήσεις που δημιουργούν την κύρια κλάση, ρυθμίζουν και έπειτα εκτελούν την εφαρμογή. Η συνάρτηση `Gtk.Main` ξεκινά τον κύριο βρόχο του GTK, που εκτελεί τη διεπαφή χρήστη και ξεκινά την ακρόαση για συμβάντα (όπως κλικ και πατήματα πλήκτρου).

Αυτός ο κώδικας είναι έτοιμος να χρησιμοποιηθεί, οπότε μπορείτε να τον μεταγλωττίσετε με κλικ κατασκευήκατασκευή έργου (ή πιέζοντας ShiftF7).

Αλλαγή της ρύθμισης σε προεπιλογή και τότε πάτημα εκτέλεση για ρύθμιση του καταλόγου κατασκευής. Χρειάζεται να το κάνετε μόνο μια φορά, για την πρώτη κατασκευή.

# Πρόσβαση στη ροή βίντεο της κάμερας web με το GStreamer

Ο σκελετός πολυμέσων GStreamer είναι ικανός στο χειρισμό βίντεο από ιστοκάμερες. Ας προσθέσουμε το GStreamer στην εφαρμογή μας και έτσι μπορούμε να προσπελάσουμε το ρεύμα βίντεο.

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; } }

Πρώτα ας αφαιρέσουμε το παράθυρο που δημιουργήσαμε πριν επειδή το GStreamer θα φροντίσει την εμφάνιση της εικόνας στην οθόνη.

Τώρα δημιουργούμε ένα στοιχείο GStreamer που προσπελάζει την ιστοκάμερά μας. Χρησιμοποιούμε το στοιχείο Camerabin, που είναι ένα στοιχείο κάμερας όλα σε ένα και μπορεί να παίρνει φωτογραφίες, βίντεο να εφαρμόζει εφέ και πολύ περισσότερα. Τέλειο για την περίπτωση χρήσης μας! Με τον `this.camerabin.set_state (Gst.State.PLAYING)` λέμε στη διοχέτευση GStreamer που μόλις δημιουργήσαμε να ξεκινήσει το παίξιμο. Δεν είναι εύκολο;

Of course it is also possible to integrate the video more tightly into other windows but that is an advanced topic that includes some details of the X Window System we will omit here.

Μεταγλώττιση και τρέξιμο του πάλι. Θα καταλήξετε με δύο παράθυρα. Στο επόμενο βήμα θα ενσωματώσουμε το βίντεο στο παράθυρο GTK+.

# Υλοποίηση αναφοράς

Εάν έχετε προβλήματα με το μάθημα, συγκρίνετε τον κώδικά σας με αυτόν τον κώδικα αναφοράς. Υπάρχει επίσης μια πιο εκτεταμένη υλοποίηση που ενσωματώνει το παράθυρο σε ένα κανονικό Gtk.Window που εμπεριέχει μερικές προχωρημένες τεχνικές και προσθέτει κουμπιά για έναρξη/σταμάτημα της εικόνας.

# Περαιτέρω ανάγνωση

Για να βρείτε περισσότερα για τη γλώσσα προγραμματισμού Vala ίσως θέλετε να ελέγξετε το μάθημα Vala.

# Συμπέρασμα

Αυτό είναι, κατορθώσατε να δημιουργήσετε μια πλήρη εφαρμογή φωτογραφίας ιστοκάμερας σε 15 λεπτά. Τώρα μπορείτε να ξυριστείτε ή να προσθέσετε καλλυντικά στο όμορφό σας πρόσωπο, ακριβώς πριν να έχετε μια όμορφη ημέρα στη δουλειά σας, όπου μπορείτε να εντυπωσιάσετε τους φίλους σας και συναδέλφους σας με μια φοβερή εφαρμογή που μόλις κάνατε σε 15 λεπτά.