Bonjour à tous!
Je travaille sur un projet d'analyses d'images avec Eclipse.
J'ai un programme JAVA que Pseudocode m'a proposé et me servant à extraire les classes de couleurs et à compter les pixels les contenant d'une image:
Lors de l'exécution de ce programme, j'ai ce message:
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 package color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; public class colorcounter{ public static void main(String[] args) { // lecture de l'image BufferedImage image = null; try { image = ImageIO.read(new File("26.jpg")); } catch (IOException e) { e.printStackTrace(); return; } // Map (rgb)=>count Map<Integer, Integer> rgbmapcount = new HashMap<Integer, Integer>(); // parcours des pixels de l'image, et creation/mise a jour de la Map for(int y=0;y<image.getHeight();y++) { for(int x=0;x<image.getWidth();x++) { // valeur [a]rgb, codé sur un entier (4 octets) int rgb = image.getRGB(x,y); // recherche dans la map if (!rgbmapcount.containsKey(rgb)) { rgbmapcount.put(rgb, 1); // n'existe pas => creation } else { int previouscount = rgbmapcount.get(rgb); rgbmapcount.put(rgb, previouscount+1); // n'existe => mise a jour } } } // Combien de couleurs apparaissent plus de 10 fois ? int distinctcolor=0; int pixelcount=0; for(int rgb:rgbmapcount.keySet()) { int rgbcount = rgbmapcount.get(rgb); if (rgbcount<10) continue; distinctcolor++; pixelcount+=rgbcount; } System.out.println("nombre de couleurs distinctes: "+distinctcolor); System.out.println("nombre de pixels: "+pixelcount); // Richesse de la palette double U = (double)distinctcolor / pixelcount; System.out.println("Richesse de la palette: "+U); } }
J'ai donc pensé qu'il fallait créer dans le bin du Jdk un fichier .jar contenant la classe concernée et les images à analyser, ce que j'ai fait. (image.jar)javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at color.colorcounter.main(colorcounter.java:18)
Mais il me faut aussi pour rendre cette archive exécutable modifier le Manifest
(créé par défaut lors de la création de l'archive .jar) pour y introduire le nom de la class concerné.
MANIFEST (.txt):
avec le saut de page à la dernière ligne.Manifest-Version 1.0
Created by: Tonio
Main-Class: colorcounter
Je tape donc en ligne de cde: jar cvfm image.jar MANIFEST.MF colorcounter.class 26.jpg
J'obtient un message:
J'ai cherché partout sur le net, dans les TUTO, avec Mr Google et surtout ici même mais sans rien trouver de vraiment explicite.
Les fichiers Manifest ne sont manifestement pas très intéressants (je sais elle était facile )
Aie-je fait une erreur dans l'intitulé? manifest.mf ou manifest.txt ou ????
Ou alors me gourre-je ailleurs??
Faut-il dans le manifeste à la ligne Main-Class préciser le package?
Dois-je aussi préciser le Class-Path?
M'enfin, si déjà il ne reconnait pas mon manifeste....
Merci pour votre aide, si j'arrive (enfin!) à éxecuter mon code, je ferais un ajout à la FAQ pour expliquer la méthode en détail, car j'ai remarqué en surfant ici et là que nombre de débutants rament sur cette question de l'utilisation des images avec Eclipse.....
Amicalement
Partager