IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème de fusion d'images bmp


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut Problème de fusion d'images bmp
    Bonjour,


    J'ai un problème avec ma classe pour fusionner des "fragements colonnes" d'une image,en fait j'ai une application distribuée qui recoit des colonnes de l'images dont elle connait les start colonm,end colon,start row et end row

    J'aimerais fusionner tout cela dans une seule image mais ca ne semble pas bien fonctionner


    Si vous pouviez m'éclairer ce serait sympa

    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
     
    import javax.imageio.ImageIO;
     
    //import applicationDispatcher.bin.Application;
     
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.awt.image.Raster;
    import java.io.File;
    import java.io.IOException;
     
     
    public class Merger2 {
     
        BufferedImage completeImg;
     
        public Merger2(int width, int height){
            completeImg = new BufferedImage(width,height,5);
        }
     
        public synchronized void addFragment(File f, int sc, int sr, int ec, int er){
            BufferedImage fragment = null;
     
           // if (Application._devDbg) System.out.println("** ImageMerger : fragment recu ("+sc+","+sr+","+ec+","+er+") : "+f);
            try {
            	System.out.println(f.toString());
            fragment = ImageIO.read(f);
            } catch (IOException e) {
                e.printStackTrace();
            }
     
            Raster raster = fragment.getData(new Rectangle(sc,0,ec-sc,er-sr));
            if(sr>0){
            	raster = raster.createTranslatedChild(sc,sr);
            }
            completeImg.setData(raster);        
        }
     
        public synchronized void finish(File f){
            try {
                ImageIO.write(completeImg,"bmp",f);
            } catch (IOException e) {
                e.printStackTrace();
            }
     
           // if (Application._devDbg) System.out.println("** ImageMerger : tous les fragments recus, ecriture du fichier final");
        }
     
    public static void main(String[] args){
    	Merger2 m = new Merger2(800,600);
    	m.addFragment(new File("C:\\TEMP\\CLI_BMP_INCOMMING\\1.bmp"),0, 0, 600,400);
    	m.addFragment(new File("C:\\TEMP\\CLI_BMP_INCOMMING\\2.bmp"),0, 401, 600,800);
    	m.finish(new File("C:/lol.jpg"));
    }
     
     
    }

  2. #2
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Salut
    tel que promis,
    j'ai modifier ton code ca fonctionne bien.
    j'ai éliminé quelque paramètres inutile:
    public synchronized void addFragment(File f, int startX, int startY)

    startX et startY c'est plus évident que sc et sr

    as-tu vraiment besoin d'une fonction synchronized ?
    car c'est 3 fois moin rapide dans un bloc synchro

    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
    //import applicationDispatcher.bin.Application;
     
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
     
    public class Merger2 {
     
        BufferedImage completeImg;
        Graphics2D g2;
     
        public Merger2(int width, int height){
            completeImg = new BufferedImage(width,height,5);
            g2 = (Graphics2D) completeImg.getGraphics();
        }
     
        public synchronized void addFragment(File f, int startX, int startY){    	
        	BufferedImage fragment = null;
            try 
            {
            	System.out.println(f.toString());
            	fragment = ImageIO.read(f);
            } 
            catch (IOException e) { e.printStackTrace();}
     
            g2.drawImage(fragment, startX, startY, null);
        }	    
     
     
        public synchronized void finish(File f){
            try {
                ImageIO.write(completeImg,"bmp",f);
            } catch (IOException e) {
                e.printStackTrace();
            }
     
           // if (Application._devDbg) System.out.println("** ImageMerger : tous les fragments recus, ecriture du fichier final");
        }
     
    public static void main(String[] args){
    	Merger2 m = new Merger2(800,600);
    	m.addFragment(new File("C:\\s1.bmp"),0, 0);
    	m.addFragment(new File("C:\\s2.bmp"),344,0);
    	m.finish(new File("C:/lol.jpg"));
    }
     
     
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut
    En fait je m'étais un peu mal exprimé

    Mon client recoit des fichier qui ont été gérérer à l'aide du logiciel pov ray.

    Chacun des worker génère une image de width x height mais met du noir partout en dehors de sr,sc,er,ec (ou S=start,e=End,r=Row,c=column)

    Dans mon cas je en génère que de fragments colonne s'
    est a dire que j'ai mon image de taille W * H dans différent bmp de W * F

    il faudrait donc que je découpe la zone colorée (entre sr,sc,er,ec) avant de l'ajouter
    sinon le noir contenu en dehors de la zone générée se supperpose au autre tranche de couleur des fichiers


    Mon startY sera toujours à 0 en fait vu que c'est des colonnes...

    Merci pour votre aide.

  4. #4
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    je comprend bien maintenant.

    Mais cela pose un petit problème d'efficacité. Toutes tes images ont la même dimension mais, seulement une partie est utile. S'il faut transférer ces images on tranfère aussi les colonnes noir non nécessaire = perde de temps.
    Si t'a pas le choix, faut faire avec.
    Autrement, retire toutes les fragements utile et enregistre les dans des fichier séparé avant d'en faire la transmission. Comment vont suivre les informations de reconstitution ? startX, startY ..... facile!

    - les info de reconstitutions sont dans le nom du fichier Bmp.
    construire le nom de chaque fragement avec le nom de l'image source
    et les info.

    Ex:
    nom de l'image source: paysage.bmp
    nom d'un fragment paysage + info: paysage_0_0_400_600.bmp

    Enfin, voici la nouvelle version:
    oubli pas qu'avec un bloc synchronized = 3 x moins rapide.
    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
     
    //import applicationDispatcher.bin.Application; 
     
    import java.awt.image.BufferedImage;
    import java.awt.Rectangle;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
     
    public class Merger2 {
     
        private BufferedImage completeImg;        
        private int width;
        private int height;
     
        public Merger2(int width, int height){
            completeImg = new BufferedImage(width,height,5);
            this.height = height;
            this.width = width;
        }
     
        public synchronized void addFragment(File f, int startX, int startY, int endX, int endY){
        	BufferedImage fragment = null;
            try 
            {
            	System.out.println(f.toString());
            	fragment = ImageIO.read(f);
            } 
            catch (IOException e) { e.printStackTrace();}
     
            int RGB [] =
            	fragment.getRGB(startX, startY, endX - startX, endY - startY, null, 0, width);
            completeImg.setRGB(startX, startY, endX- startX, endY - startY, RGB, 0, width);
        }	    
     
     
        public synchronized void finish(File f){
            try {
                ImageIO.write(completeImg,"bmp",f);
            } catch (IOException e) {
                e.printStackTrace();
            }
     
           // if (Application._devDbg) System.out.println("** ImageMerger : tous les fragments recus, ecriture du fichier final");
        }
     
    public static void main(String[] args){
    	Merger2 m = new Merger2(1800,1600);
    	m.addFragment(new File("C:\\a1.bmp"), 0, 0, 252, 600); // image, noir
    	m.addFragment(new File("C:\\a2.bmp"),252, 0, 800, 600);	// noir , image
    	m.finish(new File("C:/lol.jpg"));
    }
     
     
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut
    Merci comme ca, ca marcher bcp mieux

    Je faisais déjà comme tu dis, je met plein d'info dans le nom du fichier en fait


    Je vais essayer de faire comme tu suggères découper les bord noirs pcq ca met du temps à transférer pour un truc qu'on jette

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut
    Exellent ! je gagne déjà qq seconde en localhost
    je suppose que sur le cluster je vai gagné bcp plus
    ainsi je peux encore un peu augementer le nombre de tranche vu que la taille de fichiers à transférer est plus petite

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 14
    Par défaut
    Le système semble fonctionner mais ma découpe de l'image en colonne est statique

    J'ai encore une petite question ici mais c'est fort complexe
    http://www.developpez.net/forums/sho...14#post1984714

    Merci piki

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de fusion d'images
    Par hajlaouirami dans le forum Images
    Réponses: 1
    Dernier message: 15/06/2013, 20h55
  2. Réponses: 2
    Dernier message: 05/12/2010, 15h08
  3. Problème de création d'une image BMP à partir d'un byte[]
    Par Dark_Alex69 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 28/03/2010, 16h32
  4. Réponses: 15
    Dernier message: 29/03/2008, 15h08
  5. Problème pour afficher une image bmp
    Par homeostasie dans le forum MFC
    Réponses: 6
    Dernier message: 08/05/2005, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo