lacouine
Messages postés33Date d'inscriptionvendredi 20 octobre 2000StatutMembreDernière intervention28 octobre 2004
-
27 oct. 2004 à 11:47
lacouine
Messages postés33Date d'inscriptionvendredi 20 octobre 2000StatutMembreDernière intervention28 octobre 2004
-
28 oct. 2004 à 17:38
Bonjour,
Le projet sur lequel je travaille consiste à afficher un éditeur automatique de formulaire à partir d'un document XML...
Dans ce document XML, sont renseignés tous les controles et leurs contenus du formulaire à afficher.
D'entre tous ces controles, j'ai un controle imageBox qui me permet d'éditer - visualiser une image. Or, je travaille actuellement avec un FileChooser afin d'afficher une image situer sur le poste client qui chargera mon applet application. Cependant, mon problème se corse lorsque je veux sauvegarder mon Image dans mon fichier XML de configuration du formulaire correspondant.
Par définition, dans le XML, je ne peux sauvegarder que du texte... par conséquent, je cherche donc un moyen de passer mon Image une fois crée à partir du fichier choisi, en une variable String lui correspondant ou plutôt son tableau de Byte[] qui lui correspondra (que je me chargerai de charger par la suite en String).
Bref, je cherche donc le moyen de faire :
Byte[]=Image.qqchose()....... etc...
Bien sûr, je ne m'attends pas à quelques chose de simple car j'ai déjà cherché sur le net et rien trouvé qui permet de faire ceci.... Cependant, je voudrais déjà savoir si c'est possible dans un premier et si quelqu'un aurait une source ou une idée pour résoudre mon problème...
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 27 oct. 2004 à 13:20
:big) Neodante :big)
AU lieu d'utiliser une Image classique .. utilise un BufferedImage ... mais la javadoc aurait dû te donner cette insformation !
Recherche parmi les classes celles qui te conviennent ...
@+
lacouine
Messages postés33Date d'inscriptionvendredi 20 octobre 2000StatutMembreDernière intervention28 octobre 2004 27 oct. 2004 à 13:55
Merci de ta réponse Neodante... mais cela ne répond pas à ma principal question...
J'ai déjà essayé de voir avec un BufferedImage toutes les manip que je pouvais faire... mais je n'arrive pas à trouver la solution pour obtenir à partir de l'image le tableau de byte lui correspondant... formaté au format JPEG en plus.
Je rappelle que c'est pour stocker l'info de l'image dans un champ d'un fichier XML... d'où le besoin de retranscription de l'image en son code binaire... NB : Un simple getByte() du fichier (image en l'occurence) ne marche pas pour information.
Aurais-u donc une suggestion à me faire pour mon problème ?!? Neodante ou qq'un d'autre d'ailleurs !!!
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 27 oct. 2004 à 14:25
:big) Neodante :big)
Attention une Image n'est pas encodée !!! Si tu veux l'encoder, alors regarde ma source (la dernière) sur les images ...
Ce que je peux te proposer pour faire quelque chose de propre c'est d'étendre la classe BufferedImage (afin que tu ais accès aux fonctions intéressantes), et d'implémenter la classe Serializable (en surchargant les méthodes read/write de sérialization). Dans tes méthodes de lecture écriture tu n'as qu'à enregistrer/charger l'image au format JPEG/PNG comme tu veux. Pour pouvoir faire ça je te propose d'utiliser la classe ImageIcon qui devrait te sauver ....
Mais le plus grand conseil que je peux te doner c'est de bien la lire la javadoc de chacune de ces classes ...
@+
FileImageInputStream fiis = new FileImageInputStream(file);
BufferedImage input = ImageIO.read(fiis);
OutputStream fileTemp = new FileOutputStream(fileTemp_name);
OutputStream outputStream = new BufferedOutputStream(fileTemp);
ImageIO.write(input, "jpg", outputStream);
FileInputStream fileStream = new FileInputStream(fileTemp_name);
DataInputStream in = new DataInputStream (fileStream);
byte[] b = new byte[in.available()];
in.readFully (b);
in.close();
//Supprime normalement mon fichier temporaire... sauf que ça marche pas cette fois
TAppletUtilities.delete_file(fileTemp_name);
b est bien le tab de byte que je désirais...
Cependant, cette solution n'est pas parfaitement viable car je n'arrive notamment pas à traiter le cas d'un BMP... (bizarre d'ailleurs, il me semble que "imageio" permettait de traiter ce type de fichier non ?!? Cela vient-il du fait que je veux écrire en jpg ?!? Je ne pense pas... En tout cas, quand je sélectionne un BMP... j'ai un "null" sur le input dans mon ImageIO.write(input...)... si tu vois pourquoi merci de encore une fois de tes conseils... :-)
Et deuxio, le temps de traitement est super long en ce qui concerne la lecture en tout cas... au moins 20 sec voir 30 pour lire... et ce, la première fois, c'est comme si la création du buffer prenait 2 plombes... et je sais pas pourquoi...
En fait, ça prend 2 heures entre ces lignes là (PS : j'ai pas trop creusé le truc encore de savoir quelle ligne pose le prob...) :
.......
FileImageInputStream fiis = new FileImageInputStream(file);
BufferedImage input = ImageIO.read(fiis);
OutputStream fileTemp = new FileOutputStream(fileTemp_name);
OutputStream outputStream = new BufferedOutputStream(fileTemp);
......
Donc même chose qu'au dessus, si tu as un éventuelle suggestion sur ce probleme... un grand merci encore une fois !!!)
Merci quoiqu'il en soit pour les coups de mains précédents !!!
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 27 oct. 2004 à 19:42
:big) Neodante :big)
lu,
c'est e principe de la méthode que je t'expliquais jsute au dessus ... bon d'accord je m'exprime mal !!! lol
C'est vrai, il me semble que java ne gère pas le BMP (uniquement JPEG, GIF et PNG) du simple fait que c'est MS qui a le brevet du BMP !!! A regarder dans la javadoc ...
Pour le second problème je ne vois pas trop où peyt-être le problème ... cela dépend évidemment de la taille des JPEg mais même avec de grandes images ça marche bien chez moi ... donc là je colle !!! Désolé ! ;-)
@+
lacouine
Messages postés33Date d'inscriptionvendredi 20 octobre 2000StatutMembreDernière intervention28 octobre 2004 27 oct. 2004 à 20:07
Pour le BMP... je me doutais... mais c bizarre quand même car j'ai lu sur différents sites que imageio serait sencé le gérer quand même.. Zarbi, zarbi... (NB : Peut être c'est une histoire de codage en 24 bits ou ?!?!)
Sinon pour le 2eme prob... c c.. car même pr les petites images, la lecture initiale est super longue... peut être la création du buffer comme je le supposais...
J'essaierai de poffiner cela demain... là, je suis à la maison... Donc repos les méninges !!!! lol
En tout cas, encore une fois... 10x pour ton aide !!!
Et si par hasard, tu as un éclair n'hésite pas !!! ;-)
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 28 oct. 2004 à 11:39
Je pense pas que ce soit un problème de brevet (heureusement, sur du bmp...)
bmp avec ImageIO, oui, mais depuis 1.5 ^^
A+
Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 28 oct. 2004 à 16:47
:big) Neodante :big)
Effectivement peut-être que depuis Java 5.0, le BMP est enfin dispo ... en regardant sur le site des brevets : la licence est devenu public tout comme le GIF !
@+