Bonjour,
Je cherche, à partir d'une image en noir et blanc, à obtenir un tableau d'entier à 2 dimensions contenant les valeurs des pixels de l'image en niveau de gris.
Pour cela, j'ai tenté d'utiliser ce code :
Mon problème, c'est que j'ai beau lui passer des images en noir et blanc (même des images toutes noires avec juste des formes blanches dessinées sous paint), le test de isgreyscaleimage(grabber) renvoie toujours false... et donc je me retrouve avec des valeurs qui ne correspondent pas dans mon tableau. (d'ailleur si j'essaye de le convertir en image derrière, ca modifie bien mon image : si elle affichait deux droites sur fond noir par exemple, je me retrouve avec chacune des droites dédoublée plusieurs fois, comme si un enfant avait essayer de crayonner par dessus).
Code : 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 int[][] input; // tableau 2D [x][y] contenant l'image en niveau de gris (0-255) int width; // largeur de l'image int height; // hauteur de l'image Image image = Toolkit.getDefaultToolkit().getImage(inFile); try { PixelGrabber grabber = new PixelGrabber(image, 0, 0, -1, -1, false); if (grabber.grabPixels()) { int width = grabber.getWidth(); int height = grabber.getHeight(); if (isGreyscaleImage(grabber)) { byte[] data = (byte[]) grabber.getPixels(); input = new int[width][height]; for (int x=0; x < width; x++) { for (int y=0; y < height; y++) { int offset = x*height + y; byte val = data[offset]; if (val == -1){ input[x][y] = (int)255; }else{ input[x][y] = (int) val; } } } } else { int[] data = (int[]) grabber.getPixels(); for (int x=0; x < width; x++) { for (int y=0; y < height; y++) { int offset = x*height + y; int val = data[offset]; if (val == -1){ input[x][y] = (int)255; }else{ input[x][y] = (int) val; } } } } } } catch (InterruptedException e1) { e1.printStackTrace(); }
Sauriez-vous comment je peux régler ce problème ? Si vous avez une solution basée sur une autre méthode sinon, je suis preneuse.
Merci
Edit :
le code de la fonction isgreyscaleimage est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public static final boolean isGreyscaleImage(PixelGrabber pg) { return pg.getPixels() instanceof byte[]; }
Partager