Flouter une image Java
Résolu
Étienne9
Messages postés
1022
Date d'inscription
Statut
Membre
Dernière intervention
-
jufloju -
jufloju -
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 !
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:
- Flouter une image Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
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.
PS. Je n'ai pas testé, mais ça va surement te faire avancer un peu ;-)
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 ;-)
jufloju
j'utilise ce code pour assombrir une image personnelement ^^