Bonjour, je souhaite écrire une fonction me permettant de convertir le BufferedImage passé en paramètre en image dans les tons sépia.
Or, lorsque j'exécute mon programme, le compilateur me donne une erreur de type ArrayIndexOutOfBoundsException.
Je n'ai cependant pas réussi à la corriger. Si quelqu'un peut m'éclairer.
Voici mon code:
L'exception est indiquée à la ligne que j'ai mise en rouge. Je présume donc qu'elle vient du tableau de pixels...
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 public void sepia(BufferedImage ic, int intensite) { w = ic.getWidth(); h = ic.getHeight(); int sepiaDepth = 20; WritableRaster raster = ic.getRaster(); pixels = new int[w*h*3]; raster.getPixels(0, 0, w, h, pixels); for (int i=0;i<pixels.length; i+=3) { int r = pixels[i]; int g = pixels[i+1]; int b = pixels[i+2]; int gry = (r + g + b) / 3; r = g = b = gry; r = r + (sepiaDepth * 2); g = g + sepiaDepth; if (r>255) r=255; if (g>255) g=255; if (b>255) b=255; // Darken blue color to increase sepia effect b-= intensite; if (b<0) b=0; if (b>255) b=255; pixels[i] = r; pixels[i+1]= g; pixels[i+2] = b; } raster.setPixels(0, 0, w, h, pixels); }
En tous cas si vous avez des idées ou d'autres solutions alternatives pour faire passer une image en tons sépia je suis preneuse, car j'ai eu vraiment du mal à trouver des pistes sur internet.
merci d'avance !
Partager