Fusionner deux images a l'aide de javascool
Fermé
Marwaaaaaaaaa
Messages postés
1
Date d'inscription
mardi 1 janvier 2013
Statut
Membre
Dernière intervention
1 janvier 2013
-
1 janv. 2013 à 16:40
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 janv. 2013 à 17:19
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 janv. 2013 à 17:19
A voir également:
- Fusionner deux images a l'aide de javascool
- Fusionner deux cellules excel - Guide
- Fusionner deux tableaux excel - Guide
- Comment fusionner des pdf sans logiciel - Guide
- Deux ecran pc - Guide
- Des images - Guide
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 1/01/2013 à 17:40
Modifié par KX le 1/01/2013 à 17:40
Je ne connais pas Java's Cool (même si ça m'a l'air bien moche) alors forcément il y a des choses que je ne comprends pas dans ton code, et quelques explications seraient les bienvenues.
Par exemple quand tu fais "load" où est enregistré le résultat ? Comment tu fais le lien entre ce "load" et les getWidth, getHeight, getImageColorArray qu'il y a après ? C'est magique !?
Ensuite TOUTES tes boucles sont fausses, les indices d'un tableau vont de 0 à length-1 donc tout tes <= doivent en fait être des < sinon ça va planter !
Enfin, une fois ton tableau3 obtenu, il te manque l'étape d'enregistrement dans le fichier. Mais comme getPixelColor(x, y) était magique, j'imagine que tu dois aussi avoir un setPixelColor(x,y,rgb) tout aussi magique quelque part...
Je te laisse regarder un code que j'avais déjà fait. C'est du vrai Java à la base, mais j'ai modifié la structure de classe pour que tu puisses le copier-coller tel quel dans Java's School :
Par exemple quand tu fais "load" où est enregistré le résultat ? Comment tu fais le lien entre ce "load" et les getWidth, getHeight, getImageColorArray qu'il y a après ? C'est magique !?
Ensuite TOUTES tes boucles sont fausses, les indices d'un tableau vont de 0 à length-1 donc tout tes <= doivent en fait être des < sinon ça va planter !
Enfin, une fois ton tableau3 obtenu, il te manque l'étape d'enregistrement dans le fichier. Mais comme getPixelColor(x, y) était magique, j'imagine que tu dois aussi avoir un setPixelColor(x,y,rgb) tout aussi magique quelque part...
Je te laisse regarder un code que j'avais déjà fait. C'est du vrai Java à la base, mais j'ai modifié la structure de classe pour que tu puisses le copier-coller tel quel dans Java's School :
import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; //public class TraitementImages //{ /** Sens de concaténation des images. */ public enum Sens { /** Les images sont copiées l'une à côté de l'autre */ Horizontal, /** Les images sont copiées l'une sous l'autre */ Vertical } /** * Combine deux images en une seule. * L'image3 sera une combinaison de l'image1 avec (selon le sens) l'image2 à droite ou en dessous. * Enregistre l'image avec conservation de la transparence (TYPE_INT_ARGB) selon l'extension du fichier. * @param image1 le premier fichier image * @param image2 le deuxième fichier image * @param image3 le fichier image résultat, son extension définit le type de l'image (png, jpg...) * @param sens le mode de concaténation * @param espacement taille à respecter entre les deux images * @param defaut couleur à utiliser pour l'espace entre les images (et pour les marges si les tailles d'images sont différentes) * @throws IOException */ public static void combiner(File image1, File image2, File image3, Sens sens, int espacement, Color defaut) throws IOException { BufferedImage img1 = ImageIO.read(image1); BufferedImage img2 = ImageIO.read(image2); int rgb_defaut = defaut.getRGB(); int w=0, h=0, w1=img1.getWidth(), h1=img1.getHeight(), h2=img2.getHeight(),w2=img2.getWidth(), x2=0,y2=0, // coin gauche de img2; x3=0,y3=0,x4=0,y4=0, // coins gauche et droite de l'espace à rajouter si les taille sont différentes x5=0, y5=0, x6=0, y6=0;// coins gauche et droite de la ligne d'espacement switch (sens) { case Horizontal: w=w1+espacement+w2; h=Math.max(h1,h2); x2=w1+espacement; y2=0; if (h1>h2) { x3=w1+espacement; y3=h2; x4=x3+w2; y4=h1; } else { x3=0; y3=h1; x4=w1; y4=h2; } x5=w1; y5=0; x6=w1+espacement; y6=h; break; case Vertical: w=Math.max(w1,w2); h=h1+espacement+h2; x2=0; y2=h1+espacement; if (w1>w2) { x3=w2; y3=h1+espacement; x4=w1; y4=y3+h2; } else { x3=w1; y3=0; x4=w2; y4=h1; } x5=0; y5=h1; x6=w; y6=h1+espacement; break; } BufferedImage img3 = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB); for (int x=0; x<w1; x++) for (int y=0; y<h1; y++) img3.setRGB(x, y, img1.getRGB(x,y)); for (int x=0, x_=x2; x<w2; x++, x_++) for (int y=0, y_=y2; y<h2; y++, y_++) img3.setRGB(x_, y_, img2.getRGB(x,y)); for (int x=x3; x<x4; x++) for (int y=y3; y<y4; y++) img3.setRGB(x, y, rgb_defaut); for (int x=x5; x<x6; x++) for (int y=y5; y<y6; y++) img3.setRGB(x, y, rgb_defaut); ImageIO.write(img3, image3.getName().substring(image3.getName().indexOf(".")+1), image3); } /*public static*/ void main() throws IOException { combiner(new File("C:/img1.png"),new File("C:/img2.png"),new File("C:/img3.png"),Sens.Horizontal,0,Color.BLACK); } //}La confiance n'exclut pas le contrôle