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

Java Discussion :

Gros problème traitement d'image satellite de très grande taille


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 25
    Par défaut Gros problème traitement d'image satellite de très grande taille
    bonjour à tous, je viens à vous car je suis actuellement stagiaire dans un centre de recherche et je développe un logiciel qui affiche les images satellite, malheureusement je n'arrive pas à afficher les images très haute résolution. L'erreur pour moi viens principalement de ma boucle for mais je ne vois qu'est ce que ça peut être. Excusez moi si ce n'est pas assez clair( j'ai commencé il y a deux semaine)

    Voici mon code :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    //w largeur de l'image, h heuteur de l'image, filename nom du fichier 
    RAWimage(String filename, int w, int h){
     
    	try{
     
    		if (w < 6000 && h < 6000){
    		fis = new FileInputStream(filename);
     
    		datarray = new byte[w*h];
     
    		fis.read(datarray);
     
    		bufdatabyte = new DataBufferByte(datarray,w*h);
     
    		initLUT();
     
    		icm = new IndexColorModel(8,256,lut[0],lut[1],lut[2]);
     
    		sm = new BandedSampleModel(DataBuffer.TYPE_BYTE,w,h,1);
     
    		point = new Point(0,0);
     
    		raster = Raster.createWritableRaster(sm,bufdatabyte,point);
     
    		bufimage = new BufferedImage(w,h,BufferedImage.TYPE_BYTE_INDEXED,icm);
     
    		bufimage.setData(raster);
     
    		planim= new RenderedImageAdapter(bufimage);
    		}
    		else
                    // MON PROBLEME EST ICI pour les image dont la résolution est supérieur a 6000*6000
    		{
    			int step,
    			k=0,
    			H= w/2,
    			L= h/5;
    			fis = new FileInputStream(filename);
                            // on crée un tableau 2 dimensions d'octet qui va enregistrer les octet necessaire pour afficher l'image 
     
    			dataTab = new byte[H][L];
     
     // on crée un tableau 1 dimension qui va enregister une ligne d'octet de la taille de la largeur d'une ligne de l'image
     
    			byte []tabPxl = new byte[L];
     
     
     
    			for(int i = 0; i <H-1 ;i++)
    			{	
    						// on lit une premiere ligne d'octet
    						fis.read(tabPxl);
                                                   // on insere un octet ou pixel sur 4 afin de réduire l'image 
    						for(step = 0; step<L-1;step+=4){
                                                           // on gère les débordement de tableau
    							if(step == L-1){
    								dataTab[i][L-1]= tabPxl[L-1];
    							}
    							else
     
    							{// on insère les octet dans le tableau 2 dimensions
    								dataTab[i][k]= tabPxl[step];
    								k++;
                                                              // si la ligne est terminé on ré-initialise l'indice de parcours de la ligne du tableau 2 dimensions
    								if(k == L-1){
    									k =0;
    								}
     
    							}
     
    						}
                                                    // on saute 3 ligne d'octet afin d'avoir 1 pixel sur 3 en hauteur aussi
    						for(int j = 0; j<2; j++){
    							fis.read(tabPxl);
    						}
     
    			}
    			// on insere notre tableau dans un buffer de byte
    			bufdatabyte = new DataBufferByte(dataTab,L*H);
     
    			initLUT();
     
    			icm = new IndexColorModel(8,256,lut[0],lut[1],lut[2]);
     
    			sm = new BandedSampleModel(DataBuffer.TYPE_BYTE,L,H,1);
     
    			point = new Point(0,0);
     
    			raster = Raster.createWritableRaster(sm,bufdatabyte,point);
     
    			bufimage = new BufferedImage(L,H,BufferedImage.TYPE_BYTE_INDEXED,icm);
     
    			bufimage.setData(raster);
     
    			planim= new RenderedImageAdapter(bufimage);
     
    		}

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Tu n'aurais pas d'erreur dans ta console genre un "out of memory" ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 25
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Tu n'aurais pas d'erreur dans ta console genre un "out of memory" ?
    non par contre j'ai l'erreur :

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2957
    at java.awt.image.DataBufferByte.getElem(Unknown Source)
    at java.awt.image.BandedSampleModel.getPixels(Unknown Source)
    at java.awt.image.Raster.getPixels(Unknown Source)
    at java.awt.image.BufferedImage.setData(Unknown Source)
    at packages.rawimage.RAWimage.<init>(RAWimage.java:110)
    at packages.rawimage.RAWimage.create(RAWimage.java:130)
    at packages.rawimage.ReadImage.getImage(ReadImage.java:51)
    at packages.ihm_image.VisuTite.ChangeImage(VisuTite.java:475)
    at packages.ihm_image.VisuTite.ouvrirImageCLA(VisuTite.java:867)
    at packages.ihm_image.VisuTite$MenuItemActionListener.actionPerformed(VisuTite.java:536)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par magid31 Voir le message
    non par contre j'ai l'erreur :

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2957
    Ben cela signifie tout simplement que tu as une erreur dans ton algorythme, puisque tu vas récupérer un élément à un index inexistant...


    Au passage tu ne libères pas le flux que tu ouvres, et tu sembles tout conserver dans des attributs d'instances. Cela ne me semble pas très propre



    a++

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 25
    Par défaut
    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
    for(int i = 0; i <H-1 ;i++)
    			{	
    						// on lit une premiere ligne d'octet
    						fis.read(tabPxl);
                                                   // on insere un octet ou pixel sur 4 afin de réduire l'image 
    						for(step = 0; step<L-1;step+=4){
                                                           // on gère les débordement de tableau
    							if(step == L-1){
    								dataTab[i][L-1]= tabPxl[L-1];
    							}
    							else
     
    							{// on insère les octet dans le tableau 2 dimensions
    								dataTab[i][k]= tabPxl[step];
    								k++;
                                                              // si la ligne est terminé on ré-initialise l'indice de parcours de la ligne du tableau 2 dimensions
    								if(k == L-1){
    									k =0;
    								}
     
    							}
     
    						}
                                                    // on saute 3 ligne d'octet afin d'avoir 1 pixel sur 3 en hauteur aussi
    						for(int j = 0; j<2; j++){
    							fis.read(tabPxl);
    						}
    Merci, justement vous pensez qu'il faudrait modifier quoi dans cette boucle parce qu'a vrai dire sa fait pas mal de temps que j'y suis et j'ai essayé vraiment beaucoup de solutions.

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par magid31 Voir le message
    Merci, justement vous pensez qu'il faudrait modifier quoi dans cette boucle parce qu'a vrai dire sa fait pas mal de temps que j'y suis et j'ai essayé vraiment beaucoup de solutions.
    Bah déja, je te conseillerais de dire quelle est est la ligne correspondant au fichier RAWimage.java ligne 110. Ca nous evitera de chercher le probleme et ca t'aidera peut etre à voir l'erreur

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

Discussions similaires

  1. Problème traitement d'image
    Par tex50 dans le forum Images
    Réponses: 3
    Dernier message: 29/11/2011, 10h20
  2. traitement d'image de très grande taille
    Par issane dans le forum Images
    Réponses: 4
    Dernier message: 03/06/2010, 07h50
  3. toolbox traitement d'images satellites
    Par jyjeanphi dans le forum Images
    Réponses: 1
    Dernier message: 02/04/2009, 18h10
  4. [Upload] GROS problème UPLOAD d'image !
    Par skarapace dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2006, 11h44
  5. problème de conversion de très très grande taille !
    Par Conficius dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2005, 22h14

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