Encoder un flux en direct

Encoder un flux en direct - Java - Programmation

Marsh Posté le 07-01-2003 à 09:59:15    

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
Reply

Marsh Posté le 07-01-2003 à 09:59:15   

Reply

Marsh Posté le 07-01-2003 à 10:10:04    

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

Reply

Marsh Posté le 07-01-2003 à 11:04:36    

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
Reply

Marsh Posté le 07-01-2003 à 13:52:54    

Vraiment !? ça inspire personne !?

Reply

Marsh Posté le 07-01-2003 à 15:51:20    

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

Marsh Posté le 07-01-2003 à 16:06:53    

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

Reply

Marsh Posté le 07-01-2003 à 16:07:27    

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

Reply

Marsh Posté le 07-01-2003 à 16:11:01    

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

Marsh Posté le 07-01-2003 à 16:14:12    

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) ?

Reply

Marsh Posté le 07-01-2003 à 16:16:41    

StringWriter ?

Reply

Marsh Posté le 07-01-2003 à 16:16:41   

Reply

Marsh Posté le 07-01-2003 à 16:23:38    

krosso a écrit :

StringWriter ?


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

Reply

Marsh Posté le 07-01-2003 à 16:56:55    

Personne ne sait faire ça ? c impossible ?

Reply

Marsh Posté le 07-01-2003 à 17:05:03    

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 ?

Reply

Marsh Posté le 07-01-2003 à 17:07:46    

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

Marsh Posté le 07-01-2003 à 17:10:17    

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

Reply

Marsh Posté le 07-01-2003 à 17:13:47    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed