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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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]