[Resolu] : Redimensionnement d'image JPEG
Voila,
j'ai un programme qui redimensionne des images JPEG de tailles quelconques.
Cependant certaines photos qui ne sont pas forcement excessivement grosses font planter la JVM avec un "java.lang.OutOfMemoryError".
Voici le programme
Code:
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| public boolean resize(int i, String s, String s1)
{
float af[] = {
0.3333333F, 0.2F, 0.2F, 0.3333333F
};
boolean flag = false;
boolean flag1 = false;
boolean flag2 = false;
Object obj = null;
Object obj1 = null;
Object obj2 = null;
File file = new File(s);
File file1 = new File(s1);
BufferedImage bufferedimage = ImageIO.read(file);
//CA PLANTE TOUJOURS A CET ENDROIT
Raster raster = bufferedimage.getData();
double d = bufferedimage.getWidth();
double d1 = bufferedimage.getHeight();
double d2 = i;
double d3 = d2 / d1;
if(d > d1)
{
d3 = d2 / d;
}
if(d3 > 1.0D)
{
d3 = 1.0D;
}
int j = (int)(d * d3);
int k = (int)(d1 * d3);
BufferedImage bufferedimage1 = new BufferedImage(j, k, bufferedimage.getType());
WritableRaster writableraster = bufferedimage1.getRaster();
int ai[] = new int[4];
int ai1[] = new int[4];
int l = (int)d / j;
int i1 = (int)d1 / k;
for(int j1 = 0; j1 < j; j1++)
{
for(int k1 = 0; k1 < k; k1++)
{
ai[0] = 0;
ai[1] = 0;
ai[2] = 0;
ai[3] = 0;
for(int l1 = 0; l1 < l; l1++)
{
for(int i2 = 0; i2 < i1; i2++)
{
raster.getPixel(j1 * l + l1, k1 * i1 + i2, ai1);
ai[0] += ai1[0];
ai[1] += ai1[1];
ai[2] += ai1[2];
ai[3] += ai1[3];
}
}
ai[0] /= i1 * l;
ai[1] /= i1 * l;
ai[2] /= i1 * l;
ai[3] /= i1 * l;
writableraster.setPixel(j1, k1, ai);
}
}
ImageIO.write(bufferedimage1, "JPEG", file1);
return true;
IOException ioexception;
ioexception;
return false;
} |
J'ai mis l'endroit ou ca plante toujours, c'est à dire au moment du
Code:
Raster raster = bufferedimage.getData();
J'utilise des photos provenant d'appareil numerique, elles font generalement en 5 et 10Mo et c'est pas forcement les plus grosses qui font planter la JVM.
Ce que j'aimerai savoir c'est si quelqu'un à une idée du pourquoi ca pourrait planter et si vous voyez une autre maniere de proceder à la chose
Merci de votre aide[/b]