Tél 01 53 01 98 30 - Fax 01 42 72 78 18 - Snap charlemagne4eme

Introduction

Le but du projet est de créer des images en incrustant des motifs sur un fond dans un certain ordre. Le fond et les motifs seront des images préexistantes venant du même dossier que votre programme. Ces images devront être des fichiers au format jpeg, un format de stockage courant. Celle que l’on créera sera sauvée sous ce format.

La lecture et l’écriture de fichiers au format jpeg seront réalisées par un programme clés en main qui vous est fournit et qui assurera la conversion vers une représentation interne en java sous forme de tableau d’entiers (cf. section suivante). De même, l’affichage d’une image dans une fenêtre sera réalisée par ce programme.

 

1 Représentation des images :

Une image est une matrice de points ou pixels qui sont chacun caractérisé par une couleur. Cette couleur est spécifiée comme un mélange de trois couleurs primaires : le rouge, le vert et le bleu. La quantité de chaque couleur dans le mélange est précisée par un nombre entier compris entre 0 et 255. Par exemple, la couleur 255 0 0 correspond à un mélange du maximum de rouge avec pas de vert et pas de bleu : c’est le rouge le plus rouge qui soit. Le blanc est représenté par 255 255 255 et le noir par 0 0 0. Le jaune est obtenu en mélangeant du rouge et du vert : 255 255 0 pour le jaune le plus vif, 200 200 0 pour un jaune plus terne.

La représentation d’une image en java se fera dans ce projet au moyen d’un tableau d’entiers à trois

dimensions : la première dimension est la coordonnée horizontale (x) du point, la deuxième dimension est la coordonnée verticale du point (y), la troisième dimension sert pour la couleur. Le rouge sera dans la case 0, le vert dans la case 1 et le bleu dans la case 2. Par exemple, si l’image est contenu dans un tableau déclaré par int[][][] tab;, la case référencée par tab[50][0][1] donnera la quantité de vert du point situé sur la cinquante et unième colonne (indice 50) de la première ligne (indice 0) de l’image.

 

2 Le projet :

 

Le projet sera un programme proposant un menu en mode texte dans la fenêtre terminal de l’ordinateur.

Il proposera les opérations suivantes :

ouvrir une image à partir d’un fichier existant.

fermer une image.

commencer la création d’une nouvelle image en spécifiant le fond.

incruster une image ouverte dans une image en cours de création à un emplacement donné.

terminer la création d’une image en la sauvant dans un fichier.

afficher la liste des images ouvertes avec leur nom de fichier.

quitter le programme.

 

A la création d’une nouvelle image, il faut faire une copie du tableau correspondant à l’image du fond pour pouvoir modifier le contenu de la nouvelle image sans altérer le tableau décrivant l’ancienne image.

Lors de l’incrustation d’une image sur le fond, on considérera que la couleur blanche correspond au fond de l’image à incruster. Les points blancs ne seront pas recopiés. Seuls les points d’une autre couleur seront incrustés dans la nouvelle image.

 

Ce programme devra utiliser des classes, des objets et des exceptions.

Programme fourni

Le programme fourni consiste en deux classes appelées ImageExterneLue et ImageExterneCree.

La classe ImageExterneLue offre les fonctionnalités suivantes :

un constructeur qui prend en paramètre un nom de fichier. Il peut lever les exceptions FileNotFoundException

si le fichier n’existe pas et IOException en cas de problème de lecture du fichier. Il sert à créer une image à partir d’un fichier existant.

une méthode sans paramètre getTableau qui renvoie le tableau d’int à trois dimensions correspondant à l’image.

une méthode fermer qui ferme la fenêtre d’affichage de l’image.

La classe ImageExterneCree fournit les fonctionnalités suivantes :

un constructeur qui prend en paramètre un tableau d’int à trois dimensions. Le paramètre spécifie l’image à sa création.

Une méthode changeImage qui ne renvoie rien et prend en paramètre un tableau d’int à trois dimensions. Elle sert à changer une image existante, le nouveau contenu de l’image étant donné par le paramètre.

une méthode sauver qui prend en paramètre un nom de fichier et sauve l’image dans ce fichier. Elle peut lever des exceptions, notamment IOException.

une méthode fermer qui ferme la fenêtre d’affichage de l’image.

Pour le projet, typiquement une image est créée avec à l’appel du constructeur, un tableau représentant le fond de l’image et chaque incrustation se traduit par un appel à changeImage.

Un exemple d’utilisation est fourni avec la classe.

Utiliser les bibliothèques adéquates ( ex : le module imageio, ...)