Flouter une image Java

Résolu
Bonjour,

Décidément, j'ai fait une fonction Java pour flouter une image mais elle ne fonctionne pas.

public static void flou()
{
int l=0,h=0,i=0,j=0,k=0,m=0,somme=0;
BufferedImage im=null,imfl=null;
try {
im = ImageIO.read(new File("./image.bmp"));
}
catch (Exception e) {}
l = im.getWidth();
h = im.getHeight();
imfl = new BufferedImage(l,h,BufferedImage.TYPE_INT_RGB);
for (j=1;j<h-3;j=j+3) {
for (i=1;i<l-3;i=i+3) {
for(m=j-1;m<j+1;m++) {
for(k=i-1;k<i+1;k++) {
somme = somme + im.getRGB(k,m);
}
}
somme = somme/9;
for(m=j-1;m<j+1;m++) {
for(k=i-1;k<i+1;k++) {
imfl.setRGB(k,m,somme);
}
}
try {
ImageIO.write(imfl,"bmp",new File("flou.bmp"));
}
catch (Exception e) {};
}
}
}

Quelqu'un pourrait-il m'aider s'il vous plaît ?

Merci !

2 réponses

  1. Modérateur
    Tu ne peux pas faire la moyenne des couleurs RGB, ce qu'il faut c'est faire la moyenne des composantes rouge, vert et bleu qui les composent.

    De plus pour avoir une somme de 9 valeurs, tes boucles m et k doivent être <= pas <
    Sans oublier de réinitialiser la somme à 0 à chaque fois.

    Par contre, si j'approuve le voisinage de Moore pour calculer le flou je ne vois aucune raison d'appliquer cette valeur aux 9 cases et de sauter de 3 en 3, il serait mieux de traiter uniquement la case du milieu, sinon au lieu de flouter l'image pixel par pixel, tu va faire des gros carrés.

    for (int j=1;j<h-1;j++)
    for (int i=1;i<l-1;i++)
    {
        int r = 0;
        int g = 0;
        int b = 0;
        
        for (int m=j-1;m<=j+1;m++)
        for (int k=i-1;k<=i+1;k++)
        {
            Color c = new Color(im.getRGB(k,m));
            r += c.getRed();
            g += c.getGreen();
            b += c.getBlue();
        }
        
        imfl.setRGB(i,j,new Color(r/9,g/9,b/9).getRGB());
    }

    PS. Je n'ai pas testé, mais ça va surement te faire avancer un peu ;-)
    0
    1. j'utilise ce code pour assombrir une image personnelement ^^
      0
  2. Merci beaucoup, ça fonctionne !
    Merci infiniment
    0