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

Android Discussion :

Problème déclaration de variable


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Problème déclaration de variable
    Bonjour amis du forum

    Je voudrais utiliser la fonction colorToHSV pour convertir une image rgb en hsv pour ensuite ne sélectionner qu'une seule couleur.
    Cependant j'ai un petit problème au niveau des arguments d'entrée lors de la déclaration des variables notamment.
    bitmap est une image rgb chargée avant.
    Mon code actuel est:
    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
                     int x=bitmap.getWidth();
                     int y=bitmap.getHeight();
     
    		     	               //numeriser.setText(String.valueOf(bitmap.isMutable()));
    		     	           j=1;
    		     	           t=1;
    		     	          int[] mapSrcColor = new int[x * y];
    		     	          float[] pixelHSV = new float[3];
     
    		     	         bitmap.getPixels(mapSrcColor, 0, x, 0, 0, x, y);
     
    		     	           int index=0;
    		     	           while (t<=x-1)
    		     	           {
    		     	        	   while (j<=y-1)
    		     	        	   {
    		     	        		  Color.colorToHSV(mapSrcColor[index], pixelHSV);
    		     	        		  index++;
     
    		     	        		  if (pixelHSV[0]>= 220   && pixelHSV[0]<=260)	//couleur du bleu
    		     	        	          {
    		     	        	          	    bitmap.setPixel(t, j, Color.WHITE);
    		     	        	            }
    		     	        	          else
    		     	        	          {
    		     	        	        	  bitmap.setPixel(t, j, Color.BLACK); 
    		     	        	          }
    		     	        		  j=j+1;
    		     	               }
    		     	               j=1;
    		     	               t=t+1;
    		     	           }
    		    	  }
    Cependant le programme plante avec la ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] mapSrcColor = new int[x * y];
    Et je ne comprend pas pourquoi puisque x et y existent et que ça fonctionne pour le int qui suit!?!

    Quelqu'un a t il une idée du pourquoi de cette erreur? ou une autre idée pour contourner cette ligne de code?

    Je suis dispo pour toutes précisions.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    pfiou... j'ai eu du mal... entre l'indentation et le nom des variables...

    x = width
    y = height
    donc... ces valeurs valent combien ?


    Cependant le programme plante
    Avec quelle exception ? La stacktrace indique cette ligne directement ?

    Perso pour ce genre de boucle j'éviterai les while...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int y = 0; (y < height); ++y) {
        for (int x = 0; (x < width); ++x) {
           ...
       }
    }
    A noter qu'on inverse aussi x/y pour des raisons de rapidité (la valeur d'une ligne vers une autre est distante de "width" en mémoire, ce qui risque de faire des cache-miss à chaque instance de la boucle).
    (il y a d'ailleurs de fortes chances pour index soit dans ce sens là au passage).

    J'ai peur que le résultat soit un out-of-memory....
    Tout dépend de la taille de la bitmap au départ....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci nicroman pour tes remarques, je note et je vais ferais les changements pour rendre le code plus rapide et plus clair

    Effectivement tu as raison, c'est bien un out of memory qui se passe. Car avec après avoir lu ta réponse, j'ai essayé avec des images de résolution plus faible et là pas de soucis!
    Bon et bien faudra juste que je fasse attention à la taille des images que je traite.

    Encore merci

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Un programme java est limité à 16 ou 32Mo dans le meilleurs des cas (il est possible d'utiliser plus avec des fonctions système appropriées).

    Donc, si on prend un exemple d'une bitmap de la taille d'un 1080P: 1920x1080
    Bitmap chargée: 1920x1080x4 = 8,2Mo
    Allouer un int[] de la même taille revient à demander 8,2Mo à nouveau => OutOfMemory
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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

Discussions similaires

  1. [MySQL-5.6] Problème déclaration de variable dans procédure stockée
    Par Aizen64 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/03/2015, 23h17
  2. [XL-2003] Problème déclaration de variable et capacité
    Par Vincent32 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2012, 15h58
  3. [PHP 5.2] probléme déclaration de variable
    Par tiesto95 dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2008, 14h57
  4. Problème déclaration de variables
    Par orphen dans le forum Langage
    Réponses: 5
    Dernier message: 16/01/2008, 21h10
  5. Réponses: 8
    Dernier message: 03/11/2006, 15h55

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