Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1541 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Transformer une image monochrome en tableau de bit

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformer une image monochrome en tableau de bit

n°707733
albataur
Posté le 24-04-2004 à 14:39:42  profilanswer
 

Salut :)
 
Je cherche à tranformer un bitmap (ou autre) en un tableau à deux dimension, avec en indice les coordonées de chaque pixel de l'image, contenant des bit (soit 0 noir, soit 1 blanc).
Quelle class me serait utile ?
 
Merci d'avance ;)
 
a+

mood
Publicité
Posté le 24-04-2004 à 14:39:42  profilanswer
 

n°707902
seabee
Posté le 25-04-2004 à 02:42:17  profilanswer
 

albataur a écrit :

Salut :)
 
Je cherche à tranformer un bitmap (ou autre) en un tableau à deux dimension, avec en indice les coordonées de chaque pixel de l'image, contenant des bit (soit 0 noir, soit 1 blanc).
Quelle class me serait utile ?
 
Merci d'avance ;)
 
a+


 
Au hasard : java.awt.image.BufferedImage(int width, int height, BufferedImage.TYPE_INT_RGB) (de mémoire, hein... Et puis ça dépend de l'image de départ :o )
Il suffit ensuite de faire des getRGB(x, y) dessus qui te renverront un int.
Ensuite avec ce int tu construis un java.awt.color(int rgb)
et puis avec ça t'as les 3 composantes RGB du pixel entre 0 et 255...
Ton seuillage noir et blanc ne devrait plus te poser de problème. (genre int blackAndWhite = (((pix.red + pix.blue + pix.green ) / (3 * 255)) > 0.5)? 1 : 0  :heink:  
Bon, si le problème c'est mettre ton image dans le BufferedImage, utilise ImageIO.read(File f) (de mémoire aussi, faut vérifier)qui curieusement n'accepte pas les BMP, je crois. Par contre pas de problème pour les JPEG et les PNG.  :(  
 
Bon, tu devrais t'en sortir [:b-s]

n°708019
albataur
Posté le 25-04-2004 à 15:42:47  profilanswer
 

En fait entre temps j'avais déja commencé et c'est effectivement ce que j'avais pris comme solution.
Donc ça marche parfaitement comme je le veux. Voici ce que ça donne :
 
L'image d'origine (zoomée 8x et avec une grille)
http://bougetoi.com/autres/screen_map.GIF
 
Le résultat de mon programme de test :


----------
--0000----
----------
----0-----
-0--0-----
-0--0-----
-0--000---
----------
-----000--
----------


 
Les sources de la classe :

Code :
  1. /**
  2. *This class create an object Map.
  3. *The map is represented by an array of boolean. True = there is wall, false = no wall
  4. *For creating the array it read a b&w image
  5. * @author Alesky
  6. * @version 0.1
  7. */
  8. import java.awt.image.*;
  9. import javax.imageio.*;
  10. import java.io.*;
  11. class Map{
  12.     public boolean map[][];
  13.     public int w;
  14.     public int h;
  15.     //Constant who contain the integer corresponding with the color
  16.     public static final int WHITE=-1;
  17.     public static final int BLACK=-16777216;
  18.     public Map(String file, int w, int h){
  19.     /**
  20.       * The constructor
  21.       * @param file Nom de fichier de l'image de la map
  22.       * @param w Largeur de la carte et de l'image
  23.       * @param h Hauteur de la carte et de l'image
  24.       */
  25. BufferedImage mapImage;
  26.         int i=0;
  27. int j=0;
  28. this.w=w;
  29. this.h=h;
  30. map = new boolean[w][h];
  31. //Open and create the buffer image
  32. try {
  33.     mapImage = ImageIO.read(new File(file));
  34.         }
  35. catch (IOException e) {
  36.             mapImage = null;
  37.             System.err.println("Fichier image de la map invalide" );
  38.         }
  39. //Create the map table
  40. while(i<10){
  41.     //On parcourt les colonnes
  42.     j=0;
  43.     while(j<10){
  44.  //On parcourt les lignes
  45.  map[i][j]=intRGBToBoolean(mapImage.getRGB(i,j));
  46.  j++;    
  47.     }
  48.     i++;
  49. }
  50.     }
  51.    
  52.     //This method is juste for testing the class
  53.     public static void main(String args[]){
  54. int i=0;
  55. int j=0;
  56. Map mapTest = new Map("map.GIF",10,10);
  57.    
  58. while(i<10){
  59.     //On parcourt les colonnes
  60.     j=0;
  61.     while(j<10){
  62.  if(mapTest.map[j][i])
  63.      System.out.print("0" );
  64.  else
  65.      System.out.print("-" );
  66.         j++;    
  67.     }
  68.     System.out.println();
  69.     i++;
  70. }
  71.     }
  72.    
  73.     private boolean intRGBToBoolean(int intRGB){
  74. if(intRGB==BLACK)
  75.     return(true);
  76. else
  77.     return(false);
  78.     }
  79.    
  80. }


 
Merci beaucoup pour ton aide ;)
 
a+


Message édité par albataur le 25-04-2004 à 15:44:41
n°708153
seabee
Posté le 25-04-2004 à 20:27:21  profilanswer
 

Ok  :sweat:  
 
Mais pkoi bordel de Dieu est-ce que tu mets tes dimensions en hard? Tu peux les lire sur la BufferedImage, arrête de faire le mazo, la moindre retouche sur tes dix lignes de codes va te prendre plus de temps que la sortie d'un service pack pour WinXP
 

Code :
  1. Map mapTest = new Map("map.GIF",10,10);


 
Avec
 

Code :
  1. while(i<10){
  2.              //On parcourt les colonnes
  3.              j=0;
  4.              while(j<10){
  5.             //On parcourt les lignes
  6.             map[i][j]=intRGBToBoolean(mapImage.getRGB(i,j));
  7.             j++;     
  8.              }
  9.              i++;
  10.        }
  11.         }


 
 
 
D'une manière général, prend les informations là ou elles sont sur les objets! Si tu modifies ton w ou ton h dans le main sur l'appel au constructeur de map, ton programme plante dans la boucle...
 
Edit : gt imcompréhensible  :o


Message édité par seabee le 25-04-2004 à 20:30:31
n°708167
albataur
Posté le 25-04-2004 à 21:48:56  profilanswer
 

Complètement d'accord. D'ailleurs à l'origine c'était prévu. C'est juste une erreur d'inatention.
Merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Transformer une image monochrome en tableau de bit

 

Sujets relatifs
est possible de faire ca... enregistrer un objet image...pb: taille d'un entete de groupe ne se réduit pas avec image
Image survolée qui influe sur une autre[PHP] savoir si un tableau contient au moins un element ?
recuperer la premiere ligne d'un tableau[Word/VBA] 'Modifier Image' sur un .WMF inséré mais en VBA?
Afficher un gif dans mon tableau d'affichage [edit]Faire un tableau de variables d'une classe?
[Dreamweaer Mx] : Pb d'espaces entre 'tableau de mise en forme'[Delphi] mettre une image dans une combobox
Plus de sujets relatifs à : Transformer une image monochrome en tableau de bit


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR