Flouter une image Java

Résolu/Fermé
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - 8 mars 2012 à 17:33
 jufloju - 21 mai 2015 à 22:32
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 !



A voir également:

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
8 mars 2012 à 18:31
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
j'utilise ce code pour assombrir une image personnelement ^^
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
8 mars 2012 à 19:16
Merci beaucoup, ça fonctionne !
Merci infiniment
0