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

JavaFX Discussion :

conversion d'un byteArray[] en image


Sujet :

JavaFX

  1. #1
    Membre à l'essai
    Homme Profil pro
    styliste
    Inscrit en
    Juillet 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : styliste
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 27
    Points : 20
    Points
    20
    Par défaut conversion d'un byteArray[] en image
    Hello ! bonjour/bonsoir/bonne nuit à tous !

    j'ai (encore) une question de néophyte qui à mon avis est assez simple...mais j'ai un peu du mal à trouver

    pour faire simple, je développe une petite desktop app qui permet ( entre autres fonctionnalités), de sauver des images dans une base de donnée, pour ensuite récupérer ces images pour les afficher dans l'appli.

    Donc, pour faire ca, j'utilise une BDD SQlite dans laquelle j'insère mes images sous forme d'un LargeBinaryObject (BLOB), sous un format byteArray...donc là pas de problèmes...

    Après, je souhaite récuperer ce byteArray[] depuis ma base de données pour l'afficher, je dois donc RECONVERTIR mon byteArray[] en fichier image.

    en cherchant à droite et à gauche, j'utilise le code suivant pour convertir mon byte array en image, et ca marche très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		//methode pour convertir le byte array en image
    		public static void /*File*/ ByteArrayToImage(byte [] imgData) throws IOException {
     
     
    			      ByteArrayInputStream bis = new ByteArrayInputStream(imgData);
    			      BufferedImage bImage2 = ImageIO.read(bis);
    			      ImageIO.write(bImage2, "jpg", new File("temp.jpg") );
    			      System.out.println("image created");
    //			      return monImageFile;
    			   }
    Donc ca crée bien un fichier .jpg sur mon ordi. que je parviens bien évidemment à charger dans mon imageViewer sur ma scène...en utilisant le code ci dessous (qui se trouve dans une autre classe de mon code ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File fileImg = new File("C:/Users/regol/Projets_Java/bibli/temp.jpg");
    		FileInputStream inputStream = new FileInputStream(fileImg);
    		Image img1 = new Image(inputStream);
    		ImgViewShow.setImage(img1);
    .

    Tout ca fonctionne sans soucis, sauf que c'est pas exactement ce que je voulais faire, c'est pas très propre et ca risque de me poser des problèmes d'accès par la suite lors du déploiement de l'application.

    j'aurais souhaité récupérer ce fichier image sans l'enregistrer sur mon ordi, et l'afficher directement dans mon imageviewer.

    il me faut prendre un raccourcis que je ne parviens pas à trouver. puise ImageIO.write(bImage2, "jpg", new File("temp.jpg") ) renvoie un Boolean, je ne sais pas comment accéder au fichier crée autrement qu'en allant le chercher "physiquement" sur mon SSD.
    il faudrait que cela reste un FILE....

    merci !!
    encore un petit effort et j'ai fini mon premier vrai projet ! je suis pas loin juste cette histoire d'image, puis retravailler l'ergonomie, corriger quelques comportements, mettre des alertes icic et la, bref......

  2. #2
    Membre à l'essai
    Homme Profil pro
    styliste
    Inscrit en
    Juillet 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : styliste
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    bon alors j'ai trouvé, je suis étonné de constater à quel point c'est simple en utilisant javafx.scene.image.Image, plutot que ImageIO :

    dans ma classe Utils qui gère toutes les opération de chargement, conversion etc... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //methode pour convertir le byte array en image
    		public static /*void*/ Image ByteArrayToImage(byte [] imgData) throws IOException {
     
     
    			      ByteArrayInputStream bis = new ByteArrayInputStream(imgData);
    			      Image monImageFile = new Image(bis);
                                  return monImageFile;
    			   }
    et dans le controller qui gère la scène en question , j'ai une méthode qui comporte le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
                    Image monImageFIle = utils.imageDatabasetools.ByteArrayToImage(imgByteArray);
     
    		ImgViewShow.setImage(monImageFIle);
    et là ca marche.....tellement simple je pense que j'ai du oublier un truc quelquepart..

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Ca marche et c'est simple tout simplement car le constructeur d'Image prend en paramètre un InputStream et non pas un FileInputStream et donc forcément ça marche aussi avec un ByteArrayInputStream. Ca s'appelle... du polymorphisme.
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    styliste
    Inscrit en
    Juillet 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : styliste
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    merci pour ce lien pour le polymorphisme, je vais aller revoir cette notion dont je me sers sans doute sans m'en rendre compte et sans vraiment la comprendre, il faut bien l'avouer...je vais essayer d'assimilier ca !

    merci !

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

Discussions similaires

  1. In/out putStreams (bytearray, piped, image)
    Par ghetolay dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 18/12/2009, 12h35
  2. Conversion du type d'une image
    Par ToTo13 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 21/10/2009, 10h38
  3. Conversion type string en type image
    Par mbar dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/07/2009, 23h43
  4. [EMF/GEF] Conversion d'un diagram en image
    Par sanchou dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 13/04/2007, 16h56
  5. Conversion d'une séquence d'images
    Par hanane78 dans le forum Images
    Réponses: 4
    Dernier message: 22/01/2007, 20h35

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