Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.java > #1829

Re: Programme Java Transformation Image PPM

From Yliur <yliur@free.fr>
Newsgroups fr.comp.lang.java
Subject Re: Programme Java Transformation Image PPM
Date 2021-06-13 18:37 +0000
Organization A noiseless patient Spider
Message-ID <sa5ja0$55g$2@dont-email.me> (permalink)
References <1Pydnc5QqKrSkFj9nZ2dnUU7983NnZ2d@giganews.com> <sa40iu$55g$1@dont-email.me> <HKWdnS9gmM_oYFj9nZ2dnUU798zNnZ2d@giganews.com>

Show all headers | View raw


> Bonjour Yliur,
> 
> Merci beaucoup pour ton retour très complet avec tous ces conseils et
> explications ça m'a permis de bien comprendre le projet et la
> philosophie que devrait avoir le code.
> 
> J’ai donc remis à jour mon code dans le repository Github suivant (j’ai
> changé l’emplacement): https://github.com/henryd02/programme_image_java
> J’ai donc réorganisé les classes dans les différents fichiers :
> ImageTreatment (main), Segment, Image, LoadImage (avec la fonction pour
> charger l’image), SaveImage (avec la fonction pour sauvegarder l’image).

Le document d'aide c'était juste pour te donner quelques exemples, tu 
n'en a pas besoin dans ton programme. Tu peux supprimer les classes 
LoadImage, SaveImage et Terminal.

Pour l'instant tu peux juste placer les deux fonctions de chargement dans 
ImageTreatment :

public static Image chargerImage (String chemFicImage)
{
    ...
}

public static void sauvegarderImage (Image image, String chemFicImage)
{
    ...
}

Pour les appeler depuis main(), tu écris simplement leur nom :
    chargerImage ("...") ;


> J’aurais plusieurs questions :
> 
> - Pour le chargement et la sauvegarde de l’image, il y avait un fichier
> d’aide dans la documentation (je ne l’avais pas vu et je viens de mettre
> le fichier 1_aide_code_java.pdf dans le repo) du projet avec une classe
> LoadImage et SaveImage dans lesquelles sont déclarées les fonctions
> public static void main( String [] args ) afin de charger et sauvegarder
> un fichier (l’image). J’ai donc créer 2 nouveaux fichiers java avec ces
> 2 classes. Par contre, je n’arrive pas utiliser la méthode main, qui est
> déclaré dans les classes, dans le fichier ImageTreatment.java. Par
> exemple, j’ai essayé d’écrire l’instruction LoadImage(); mais rien ne se
> passe. Est ce que tu sais comment faire s’il te plait ? Une fois que
> cela fonctionnera je mettre tout le code de chargement de l’image avec
> l'algorithme pour récupérer les informations directement dedans

De manière général, on n'appelle pas la méthode main() (« principale ») : 
elle est exécutée quand on lance le programme, c'est tout.

Pour appeler des fonctions statiques d'une autre classe, on peut utiliser 
cette forme :
    Classe.fonction (...) ;

S'il s'agit de méthodes, on crée un objet de cette manière :
    Classe objet = new Classe() ;
Puis on appelle la méthode comme ça :
    objet.methode (...) ;


> - Ok pour utiliser les ArrayList pour le moment (et voir après pour
> transformer en listes chaînées). Il s’agit bien de déclarer comme cela
> un ArrayList : String[] stringTab; ?

Non, c'est une classe de java.
String[] c'est un tableau dont la taille est fixée lors de sa création.
ArrayList c'est une classe permettant de créer des tableaux extensibles 
(au fur et à mesure qu'on ajoute des éléments dedans, la taille allouée 
s'accroît).

Ça se déclare comme ça :
    ArrayList<String> chaines ;

Et ça s'initialise comme ça :
    chaines = new ArrayList<>() ;

Pour ajouter un élément dedans :
    chaines.add ("coucou") ;

Pour accéder à l'élément de rang i :
    chaines.get (i) ;


> J’ai créé les classes Image avec les attributs : width, height,
> colorScale, segmentList et Segment avec les attributs : red, green,
> blue, pixelsNum. Il faudra par la suite créer les méthodes darken_color,
> lighten_color,
> black_n_white, negative_color, pour la classe Segment et show_size,
> crop_image, darken_image, lighten_image, black_n_white, negative_image
> pour la classe Image afin de pouvoir faire les modifications sur ces
> objets.

D'accord.


> - Concernant l’algorithme pour créer les segment : compter les points
> successifs d’une même couleur en s’arrêtant lorsque la couleur change ou
> que la fin du fichier est atteint, je vais créer un compteur countPixel
> et les variable redLast, greenLast, blueLast qui stockent en mémoires
> les valeurs relatives au Segment. Aussi, mettre en place la condition si
> les valeurs red, green, blue sont identiques au valeurs du dernier
> (valeurs stockées dans redLast, greenLast, blueLast) alors on incrémente
> le compteur. Si différents ou on a atteint la fin du fichier, alors on
> stocke l’instance du Segment dans la l’ArrayList de l’image. Est-ce la
> philosophie est bonne selon toi ?

Oui.

> Je pense que je vais commencer à
> écrire ce code dans la fonction main() de la classe TreatmentImage

Oui, tu peux l'ajouter à ton code existant.

Tu peux dès maintenant créer une fonction de chargement d'image dans 
ImageTreatment, sur le modèle de ce que j'ai noté plus haut, et placer le 
code dedans. Pour l'appeler depuis main(), tu écris simplement 
    chargerImage ("...") ;


> Je t’invite à me dire ce que tu penses de mon code et s’il y des
> améliorations/
> correction à faire : https://github.com/henryd02/programme_image_java

Une remarque générale : essaie de ne pas masquer les exceptions. Si tu ne 
fais pas de traitement particulier des erreurs, tu peux ajouter
    throws Exception
à la fin de la ligne
    public static void main ...

Les exceptions qui ne sont pas capturées avec catch donneront une pile 
d'appels qui t'aidera à comprendre ce qui s'est passé. Dans ton exemple 
tu as capturé les exceptions de type IOException, affiché un message 
indiquant que le fichier n'a pas été trouvé (ça pourrait être ça, mais ça 
pourrait être autre chose), masqué la pile d'appel et laissé le programme 
poursuivre (le traitement continue après le catch en cas d'erreur, alors 
que si une erreur survient tu voudrais probablement que le programme 
plante avec le message d'erreur précis).

Si try réclame que tu le complètes avec quelque chose quand tu supprimes 
le catch, tu peux supprimer ajouter à la place
    finally
    {}

Back to fr.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Programme Java Transformation Image PPM henryd <nospam_henry.dossot@gmail.com.invalid> - 2021-06-12 14:38 -0500
  Re: Programme Java Transformation Image PPM Yliur <yliur@free.fr> - 2021-06-13 04:12 +0000
    Re: Programme Java Transformation Image PPM henryd <nospam_henry.dossot@gmail.com.invalid> - 2021-06-13 07:43 -0500
      Re: Programme Java Transformation Image PPM Yliur <yliur@free.fr> - 2021-06-13 18:37 +0000
        Re: Programme Java Transformation Image PPM Yliur <yliur@free.fr> - 2021-06-19 09:22 +0000
          Re: Programme Java Transformation Image PPM Yliur <yliur@free.fr> - 2021-06-21 01:19 +0000
            Re: Programme Java Transformation Image PPM yamo' <yamo@beurdin.invalid> - 2021-06-28 08:16 +0200
              Re: Programme Java Transformation Image PPM Yliur <yliur@free.fr> - 2021-06-30 17:26 +0000

csiph-web