Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2556 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Encoder un flux en direct

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Encoder un flux en direct

n°280788
El_gringo
Posté le 07-01-2003 à 09:59:15  profilanswer
 

Bon, là, c un problème que je vois très mal comment résoudre.
Voila, j'utilise JAI (une lib Java pour bosser sur les images).  
J'utilise donc JAI, pour générer une image au format nécessaire. Ensuite, je demande à JAI d'écrire directement cette image convertie dans un flux, de la manière suivante :

Code :
  1. // Encode dit à JAI que c une opération d'encodage
  2. // imageToPrint est l'image en mémoire (type RenderedImage)
  3. // _out est mon flux de sortie (OutputStream)
  4. // strFormat est le format ds lequel convertir ("jpg", "tif", ...)
  5. JAI.create("encode", imageToPrint, _out, strFormat, null);


 
Et voila mon pb : je voudrais pouvoir encoder directement ce flux, de manière à ce que le flux de donnée, une fois que l'image à été convertie en jpg ou autre format, soit encodé en bin-hex (les donnée binaire sont converties en hexadécimal). Comment faire ça ? faut-il que j'écrive une classe de flux particulier du style BinhexOutputStream (dans la lignée des ZipOutputStream et compagnie) ? Je vois pas comment faire ça, aidez moi si vous plé !!!! :sweat:


Message édité par El_gringo le 07-01-2003 à 10:05:29
mood
Publicité
Posté le 07-01-2003 à 09:59:15  profilanswer
 

n°280798
El_gringo
Posté le 07-01-2003 à 10:10:04  profilanswer
 

Ou est ce que je doit hériter de FilterOutputStream ?

n°280870
El_gringo
Posté le 07-01-2003 à 11:04:36  profilanswer
 

Bon, maintenant, je suis à peu près sur qu'il me faudra écrire une extention de FilterOutputStream.
Mais je n'vois toujours pas comment surcharger les méthodes d'écriture de FilterOutputStream, dans ma class BinhexOutputStream.
Pour info, voila mon algo actuel de traduction d'un flux binaire en flux hexa :

Code :
  1. /** Ecrit dans le flux de sortie correspondant au writer passé en paramètre, les données converties au format
  2.      * bin-hex du fichier temporaire associé à la page.
  3.      * @param _writer sortie.
  4.      * @param _bAfterTransform indique si l'encodage en binhex doit être fait si les données brutes trouvées dans le
  5.      * jukebox (<code>false</code> ), ou si la transformation pour affichage doit être faite avant l'encodage binhex. Ce
  6.      * paramètre n'a aucun impact dans le cas des fichier natifs.
  7.      */
  8.     public void WriteBinHexData (Writer _writer, boolean _bAfterTransform)
  9.     {
  10.         File file = getPageFile();
  11.         try
  12.         {
  13.             FileInputStream fileInputStream = new FileInputStream (file);
  14.             try {
  15.                 // Taille du buffer de lecture
  16.                 final int BUFFER_LENGTH = 1024;
  17.                 // Tableau contenant les octets lus
  18.                 byte[]          data = new byte[BUFFER_LENGTH];
  19.                 // StringBuffer contenant les données converties
  20.                 StringBuffer    strb = new StringBuffer();
  21.                 // lecture de BUFFER_LENGTH octets
  22.                 while (fileInputStream.read (data) != -1)
  23.                 {
  24.                     // énumération de chaque octet lu
  25.                     int iPos = 0;
  26.                     for (int i = 0; i < data.length; i++) {
  27.                         byte b = data[i];
  28.                         // mise à "00" de la partie du StringBuffer dans laquelle va ê inscrit l'octet encodé
  29.                         strb.append ("00" );
  30.                         // Récupération de la valeur hexa de l'octet
  31.                         String strHexByte = Integer.toHexString (b);
  32.                         // écriture de cette valeur dans le StringBuffer
  33.                         int len = strHexByte.length();
  34.                         if (len >= 1)
  35.                             strb.setCharAt(iPos + 1, strHexByte.charAt (strHexByte.length()-1));
  36.                         if (len >= 2)
  37.                             strb.setCharAt(iPos, strHexByte.charAt (strHexByte.length()-2));
  38.                         iPos   += 2;
  39.                     }
  40.                     _writer.write (strb.toString());
  41.                     _writer.write ("\r\n" );
  42.                     strb.setLength(0);
  43.                 }
  44.             } finally {
  45.                 // Fermeture du flux d'entrée dans tous les cas
  46.                 fileInputStream.close ();
  47.             }
  48.         } catch (IOException e) {
  49.             s_logger.error("Erreur lors de la convertion de la page au format bin-hex", e);
  50.         }
  51.    }


 
 
Ouais, donc ds mon cas, j'vais plutot utiliser un BinhexWriter, ms ça change pas trop mon pb... :(


Message édité par El_gringo le 07-01-2003 à 11:29:20
n°281052
El_gringo
Posté le 07-01-2003 à 13:52:54  profilanswer
 

Vraiment !? ça inspire personne !?

n°281144
--greg--
Posté le 07-01-2003 à 15:51:20  profilanswer
 

ben euh tu met (+/-) le contenu de ta boucle while dans le write de ton BinhexStreamTruc, et cette classe utiliserait un membre "buffer", qqchose comme ça
euh c quoi le pb ? :)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°281157
El_gringo
Posté le 07-01-2003 à 16:06:53  profilanswer
 

--greg-- a écrit :

ben euh tu met (+/-) le contenu de ta boucle while dans le write de ton BinhexStreamTruc, et cette classe utiliserait un membre "buffer", qqchose comme ça
euh c quoi le pb ? :)


 
Et voila mon pb : je voudrais pouvoir encoder directement ce flux, de manière à ce que le flux de donnée, une fois que l'image à été convertie en jpg ou autre format, soit encodé en bin-hex (les donnée binaire sont converties en hexadécimal). Comment faire ça ? faut-il que j'écrive une classe de flux particulier du style BinhexOutputStream (dans la lignée des ZipOutputStream et compagnie) ? Je vois pas comment faire ça, aidez moi si vous plé !!!!  

n°281159
El_gringo
Posté le 07-01-2003 à 16:07:27  profilanswer
 

(là je répète un truc hein...)

n°281165
--greg--
Posté le 07-01-2003 à 16:11:01  profilanswer
 

ben voui, comme tu l'as dit, tu crées un outputstream... (ou un writer) ... euh hahem...  [:grisemine1]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°281170
El_gringo
Posté le 07-01-2003 à 16:14:12  profilanswer
 

HAAAAAAAAAAA !!!!!!!!!!!!! je pète les plombs avec ces Streams.
Merci Greg, en fait, je devrais y arriver a ça.
Mais il me reste un pb, tout bète (j'imagine) : à partir d'un Writer, comment obtenir un OutputStream, ou alors : comment écrire le contenu d'un OutputStream, dans une String (ou StringBuffer) ?

n°281173
krosso
j'suis à la bourre
Posté le 07-01-2003 à 16:16:41  profilanswer
 

StringWriter ?

mood
Publicité
Posté le 07-01-2003 à 16:16:41  profilanswer
 

n°281182
El_gringo
Posté le 07-01-2003 à 16:23:38  profilanswer
 

krosso a écrit :

StringWriter ?


ça je connais, mais ...et pour passer d'un Writer à un OutputStream ?

n°281228
El_gringo
Posté le 07-01-2003 à 16:56:55  profilanswer
 

Personne ne sait faire ça ? c impossible ?

n°281240
El_gringo
Posté le 07-01-2003 à 17:05:03  profilanswer
 

Résumé :  
Je cheche à écrire dans une String ou StringBuffer, en passant par un OutputStream. à l'image de StringWriter, je voudrais un StringBufferOutputStream. Ou alors un moyen de passer d'obtenir un OutputStream à partir d'un Writer.
qqn à une idée !?
ha oui ? et laquelle donc ?

n°281245
--greg--
Posté le 07-01-2003 à 17:07:46  profilanswer
 

euh on ne passe pas d'un Writer à un Stream hein
(enfin si j'ai bien tout suivi)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°281249
El_gringo
Posté le 07-01-2003 à 17:10:17  profilanswer
 

Non, mais t'as pas pu tout suivre, g pas tout expliqué. Ms du coup, mon pb est ailleurs. Un pb assez complexe à expliquer (et ça serait pas bien utile j'pense) fait que j'aurais besoin d'obtenir une String à partir d'une OutputStream...

n°281260
krosso
j'suis à la bourre
Posté le 07-01-2003 à 17:13:47  profilanswer
 

OutputStream est une classe abstraite hein !?
Le OutputStream en question, c'est en fait un OS que tu as écrit et qui hérite de la classe abstraite.
Qu'est-ce qui t'empêches dans ta classe d'avoir une méthode write(String chaine).
 
Tu récupères la chaine et t'en fais ce que tu veux après (Normalement, l'envoyer à la destination).
 
précision :
 
La méthode ça peut-être write(Machin truc)
et tu fais les transformations qui vont bien sur truc pour en faire un chaine.
C'est le principe des streams non ?
 


Message édité par krosso le 07-01-2003 à 17:16:32

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Encoder un flux en direct

 

Sujets relatifs
delphi et direct xHelp progleme pour excuter un prog direct en html
les flux en C++Recuperer le flux clavier.
[C++/Direct X] erreur dans un DirectInput[XML|Java]Flux de fichier
Acces direct mémoireles flux
Récupérer variables formulaires sans POST, direct en php avec pointeurEncoder en qoted printable
Plus de sujets relatifs à : Encoder un flux en direct


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR