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

Collection et Stream Java Discussion :

convertir tableau double en image jpg


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut convertir tableau double en image jpg
    Bonjour,

    je voudrais savoir comment à partir d'un tableau de double, je pourrais creer une image en niveau de gris.
    Je voulais passer par un bufferedImage déclaré en TYPE_BYTE_GRAY puis utiliser la méthode setRGB pour charger mon buffer. Mais le probleme est que la méthode ne prend que des int comme donnéesd d'entrées. Or si je caste mes valeurs en int, tout passe à 0. Ce qui est logique vu que mes valeurs peuvent être du genre 0.4, ou 0.4321 ou 23,5, etc.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Que représentent tes doubles ??

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Citation Envoyé par chtig Voir le message
    Que représentent tes doubles ??
    En fait je suis parti d'une image que j'ai converti en tableau. Puis j'ai fait du traitement d'images dessus et je désire controler ma sortie. Donc afficher la nouvelle image.

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ca ne répond pas à ma question ... Comment as-tu transformé ton image en tableau de doubles ??

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Citation Envoyé par chtig Voir le message
    Ca ne répond pas à ma question ... Comment as-tu transformé ton image en tableau de doubles ??
    File im = new File("image.jpg");
    try{
    BufferedImage input = ImageIO.read(im);

    }
    catch (IOException e) {
    e.printStackTrace();
    }


    et apres j'utilise getRGB pour extraire les valeurs

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ben getRGB donne des int, pas des double ....

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Citation Envoyé par chtig Voir le message
    Ben getRGB donne des int, pas des double ....
    oui d'accord mais quand on fait des opérations sur des int, du genre multiplication par 0.71327 ou alors qu'on divise par un double. Il est bien possible d'obtenir des doubles, non???
    Donc j'obtiens bien un nouveau tableau de double après traitement de mon image.
    Il me reste donc l'étape de controle pour voir si mes calculs sont justes. Donc sortir une nouvelle image à partir de mon tableau de double. Et c'est là mon problème...

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Le problème c'est que tes doubles n'ont aucun sens ... Je me demande un peu ce que tu fais comme traitement d'image.
    Bref, si tu veux voir une image, il te faut un tableau d'entiers... Donc pourquoi pas utiliser Math.round et ensuite faire des setRGB ?

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Les niveaux de gris sont contenus dans [0-255], tes doubles apres ton calcul sont contenus entre [minValue-maxValue], une simple regle de trois de niveau college te permettra de connaitre la valeur a mettre dans chaque pixel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (int i = ...) {
      for (int j = ...) {
        double val = ...
        int gray = (int) (255 * val / (maxVal - minVal));
        // Faire 255-gray pour inverser la palette...
        // Creation d'une couleur sRGB solide (opaque).
        int rgb = 0xFF << 24 | (gray & 0xFF) << 16 | (gray & 0xFF) << 8 | (gray & 0xFF) << 0;
        image.setRGB(i, j, rgb);
      }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Si tu travailles avec tous les canaux,

    Il est possible par exemple d'utiliser une conversion du style :

    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
    public class ColorConverter {
    	public static byte convertToByte(double c) {
    		int tempo;
    		if(c<0) tempo = 0;
    			else if(c>255) tempo = 255;
    			else tempo = (int) c;
    		tempo  -= 128;
    		byte b = (byte) tempo;
    		return b;
    	}
     
    	public static int convertToInt(double c) {
    		int i = (int) c;
    		if(i<0) return 0;
    		else if(i> 255) return 255;
    		else return i;
    	}
     
    }
    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
    public class ImageConverter {
    	public static ImageRGB convert(BufferedImage im) {
    		ImageRGB imageOut = new ImageRGB(im.getWidth(), im.getHeight());
     
    		for (int j = 0; j < im.getHeight(); j++)
    			for (int i = 0; i < im.getWidth(); i++) {
    				int rgb = im.getRGB(i, j);
    				Color couleur = new Color(rgb);
     
    				int r = couleur.getRed();
    				int g = couleur.getGreen();
    				int b = couleur.getBlue();
    				imageOut.setRedPixel(i, j, r);
    				imageOut.setGreenPixel(i, j, g);
    				imageOut.setBluePixel(i, j, b);
    			}
     
    		return imageOut;
    	}
     
    	public static BufferedImage convert(ImageRGB imageRGB) {
    		BufferedImage image = new BufferedImage(imageRGB.getWidth(), imageRGB
    				.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    		for (int j = 0; j < imageRGB.getHeight(); j++)
    			for (int i = 0; i < imageRGB.getWidth(); i++) {
    				int fR = ColorConverter
    						.convertToInt(imageRGB.getRedPixel(i, j));
    				int fG = ColorConverter.convertToInt(imageRGB.getGreenPixel(i,
    						j));
    				int fB = ColorConverter.convertToInt(imageRGB
    						.getBluePixel(i, j));
    				Color color = new Color(fR, fG, fB);
    				image.setRGB(i, j, color.getRGB());
    			}
     
    		return image;
    	}
    }
    La grosse différence avec la méthode de bouye est qu'une valeur comme -45 vaudra 0 et une valeur comme 258 vaudra 255

Discussions similaires

  1. [VB.NET] Convertir Tableau Byte[] en image
    Par seemax dans le forum Windows Forms
    Réponses: 5
    Dernier message: 14/09/2009, 18h23
  2. Export tableau HTML vers Image PNG/JPG
    Par nic2t dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/07/2009, 09h08
  3. Convertir .avi dans une image (.jpg, .bmp)
    Par mihaispr dans le forum Simulink
    Réponses: 2
    Dernier message: 14/06/2009, 00h16
  4. Convertir une serie d'image jpg en bmp
    Par koKoTis dans le forum Imagerie
    Réponses: 2
    Dernier message: 01/10/2007, 16h34
  5. image jpg en fond de tableau
    Par pcayrol dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 26/06/2007, 09h28

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