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 with PNG_Interface; use PNG_Interface;qui contient les fonctions dont on va se servir,

puis with Shix.Types; use Shix.Types, le package qui déclare pleins de types utiles dont Pixel, Color, Image, etc ...

pour charger une image, il y a deux façons de faire :

Pour les images stockées dans le système de fichier

On utilise la fonction Read_PNG.

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 mon_image(134,23).R

Pour prendre direct une image de la camera

On 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 with Shix.Camera; use Shix.Camera;

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 smile

Ecrire une image dans le système de fichiers

Bon 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 smile

n'hésitez pas à regarder des exemples dans le dépot mercurial (png_utils.adb est un bon début).