- 1 - L'environnement de développement
- 2 - Premier programme
- 3 - Les variables
- 4 - Les structures de contrôle
- 5 - Les attributs, les énumerations
- 6 - Les tableaux
- 7 - Les sous-programmes
- 8 - Les types
- 9 - Les packages
- 10 - Le multi-tache
- 11 - Ecrire un programme pour le robot
- 12 - Utilisation de la lib PNG_Interface
- 13 - Exercice : SimpleForth
- 14 - Exercice : Startup_Manager
- 15 - Exercice : Gestion des déplacements
Comme tout le monde sait maintenant ce que sont les packages, les types, les procedures, tout ça, on va pouvoir se servir des caméras du robot ! On commence par un puis pour charger une image, il y a deux façons de faire : Pour les images stockées dans le système de fichierOn utilise la fonction Celle-ci est définie dans shix/hwinterface/camera/png_interface.adb par : procedure Read_PNG (File_Name : in String; I : out Generic_Image) Pour le filename, c'est l'adresse du fichier (en relatif ou en absolu). Il faut aussi lui donner le nom de la variable dans laquelle on stoque l'image. En fait, une Generic_Image a des sous types bien pratiques qui correspondent à nos images. En effet, voici la définition de Generic_Image : type Generic_Image is array (Positive range <>, Positive range <>) of Pixel; tandis qu'une image c'est ça : subtype Image is Generic_Image (y_range, x_range); ou (y_range, x_range) ont étées mises aux valeurs de nos caméras (240*320)... Voila, maintenant l'image est chargée dans la variable et c'est un tableau de 240*320 pixels, sachant qu'un pixel c'est ça : type Pixel is record R : Unsigned_8; G : Unsigned_8; B : Unsigned_8; end record; donc par exemple, j'accede à la composante rouge du pixel (134, 23) (attention, le pixel en haut à gauche est le pixel (0,0) et la premiere composante est verticale, la deuxième horizontale) par Pour prendre direct une image de la cameraOn utilise Acquire_Image qui n'a besoin donc que la variable dans laquelle stoquer l'image. Par exemple, myImage : Image := Acquire_Image; -- c'est faux !! myImage : Image; Acquire_Image(myImage); -- c'est bon :) et ça roule. Acquire_Image est dans le package shix-camera donc on rajoute au début un petit Il y a 4 caméras sur le robot 2008, et seule une caméra peut être utilisée pour un Acquire_Image à la fois. Pour changer de camera, on utilise la fonction de Shix.Camera procedure Set_Active_Camera(Position : Camera_Position) sachant qu'une Camera_Position c'est ça (dans Shix.Types) : type Camera_Position is (Upper_Right, Inside, Upper_Left, None); Voila, vous savez tout ! A vous les joies du traitement des images :) Ecrire une image dans le système de fichiersBon maintenant, si on a envie d'écrire une image sur le disque, on utilise la fonction Write_PNG (vous l'aviez deviné) définie toujours dans PNG_Interface : procedure Write_PNG (File_Name : in String; I : in Generic_Image) Avec ça vous devriez savoir comment faire :) n'hésitez pas à regarder des exemples dans le dépot mercurial (png_utils.adb est un bon début).
|
|||



