Obtenir un Byte[] from une Image

Signaler
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004
-
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004
-
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...

Merci d'avance de votre aide,

Anthony

11 réponses

Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
: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 ...
@+

[Responsable www.neogamedev.com]
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Tiens même le lien direct jsute pour toi :
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
@+

[Responsable www.neogamedev.com]
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004

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 !!!

Merci d'avance encore une fois !!!
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
: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 ...
@+

[Responsable www.neogamedev.com]
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004

Merci beaucoup Neodante encore une fois...

Entre temps j'ai réussi à trouver une solution.... avec ça :

NB : file est le fichier sélectionné auparavant...

.......................
.......................
String fileTemp_name="C://temp.jpg";

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 !!!

Anthony
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
: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é ! ;-)
@+

[Responsable www.neogamedev.com]
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004

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 !!! ;-)

Chuss !!!

Anthony
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
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]
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004

OK... merci Dobel... effectivement je suis toujours en 1.4... that's the reason !!! :-)

J'update direct... merci de l'info !!!

Ceao !!!

Anthony
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
: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 !
@+

[Responsable www.neogamedev.com]
Messages postés
33
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
28 octobre 2004

Yahooooo !!!! :-p Enfin libre !!!!! hehehe !!!