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

avec Java Discussion :

Représentation image en niveau de gris par Photoshop


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Points : 88
    Points
    88
    Par défaut Représentation image en niveau de gris par Photoshop
    Bonjour,

    J'ai l'image suivante (voir pj) que je souhaite manipuler en java. Pour cela je dois lire cette image et la transformer en tableau de byte.

    Quand je crée directement cette image en java, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, -67, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1, 0, -1, 0, 0, -1, 0, -1, -1, -1, -1, 0, 0, -82, 0, -95, 0]
    Mais quand j'enregistre cette image depuis photosphop et que je la convertis en java, voici sa représentation en tableau de byte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5, 5, 5, 0, 5, 0, 0, 5, 0, 5, 5, 5, 5, 0, 0, 2, 0, 1, 0]
    J'ai l'impression que photoshop fait une correspondance entre ses valeurs et les vrais valeurs, pourtant j'ai bien désactivé la compression et "l'interlace" lors de la sauvegarde.
    Avez-vous une explication?

    C'est une image en niveau de gris (un canal), j'enregistre donc cette image dans photoshop en 8bits.

    Voici le code qui ouvre mon image et la convertit :
    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
     
    File fileImgChar = new File("src/test/resources/letterA.png");
    BufferedImage imgInput = ImageIO.read(fileImgChar );
     
    byte[] srcDataImg = ImageUtil.getBytesFromGreyImage(imgInput);
     
     
    public static byte[] getBytesFromGreyImage(BufferedImage imgSrc) throws Exception {
    		int width = imgSrc.getWidth();
    		int height = imgSrc.getHeight();
     
    		// Get raw image data
    		Raster raster = imgSrc.getData();
    		DataBuffer buffer = raster.getDataBuffer();
     
    		int type = buffer.getDataType();
    		if (type != DataBuffer.TYPE_BYTE)
    		{
    			throw new Exception("Wrong image data type");
    		}
    		if (buffer.getNumBanks() != 1)
    		{
    			throw new Exception("Wrong image data format");
    		}
     
    		DataBufferByte byteBuffer = (DataBufferByte) buffer;
    		byte[] srcData = byteBuffer.getData(0);
     
    		// Sanity check image
    		if (width * height  != srcData.length) {
    			throw new Exception("Unexpected image data size. Should be greyscale image");
    		}
     
    		// Output Image info
    		log.debug("converted image to byte: width: " + width + ", height: " + height + ", num bytes: " + srcData.length);
     
    		return srcData;
    	}
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Typique des couleurs indexées.
    Un choix d'encodage logique vu la situation donnée, bien qu'il aurait été encore plus logique d'indexer sur 4 bits et non pas 8 bits.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Points : 88
    Points
    88
    Par défaut
    Comment je fais pour exploiter les différents pixels qui composent mon image en java du coup? Une méthode existe-t-il pour faire la correspondance inverse ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    A priori deux solutions :

    - getRGB() sur le BufferedImage
    OU
    - Récupérer le IndexColorModel du BufferedImage et utiliser getRGB() pour la couleur indexée qui t'intéresse. Tu peux aussi récupérer getRGBs() dès le départ et utiliser le tableau pour vérifier l'index correspondant directement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/12/2014, 21h15
  2. image en niveau de gris 16 bits
    Par kekeauboulot dans le forum Delphi
    Réponses: 2
    Dernier message: 16/06/2006, 19h25
  3. Réponses: 1
    Dernier message: 30/11/2005, 17h12
  4. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  5. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04

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