2010-04-29 8 views
3

Est-il possible d'afficher une image cryptée base64 dans un JTextPane?image base64 dans JTextPane

Voici mon code

JTextPane jTextPane = new JTextPane(); 

javax.swing.text.html.HTMLEditorKit eKit = new javax.swing.text.html.HTMLEditorKit(); 
jTextPane.setEditorKit(eKit); 

jTextPane.setContentType("text/html"); 

// my base64 image, used then in the img tag in the html... 
String img64="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7"; 

jTextPane.setText(html); 
+0

@Nicolas: J'ai reformaté votre question, pourriez-vous vérifier si la source de l'image est correcte? –

+0

Oui c'est correct, merci. – Nicolas

Répondre

1

Qu'est-ce que vous avez à faire est d'analyser l'image codée base64 dans un tableau d'octets, puis charger une image en utilisant un ByteArrayIn, putStream en utilisant ce tableau d'octets.

À titre d'exemple, pour le décodage base64, vous pouvez utiliser javax.xml.bind.DatatypeConverter#parseBase64Binary

+0

// ok merci j'ai utilisé ceci: public static byte [] decode (Chaîne str) { byte [] bt = null; try { sun.misc.BASE64Decoder décodeur = nouveau sun.misc.BASE64Decoder(); bt = decoder.decodeBuffer (str); } catch (IOException e) { e.printStackTrace(); } return bt; } // puis octet [] parseImg = f.decode (texte); ImageIcon image = new ImageIcon (parseImg, "asd"); jTextPane.insertIcon (image); // mais cela ne fait pas disparaître l'image. Pourriez-vous m'aider? – Nicolas

+0

Eh bien, sans plus d'infos, il sera difficile de vous aider. Quoi qu'il en soit, puisqu'il n'y a pas d'exception, je suppose que le décodeur Base64 a bien fonctionné. En conséquence, le problème provient de la création de l'icône de l'image. Selon la documentation du constructeur ImageIcon, iamge devrait "contenir un format d'image supporté, tel que GIF, JPEG, ou (à partir de 1.3) PNG" Est-ce votre cas? – Riduidel

+0

je vous remercie pour vos infos, j'ai complété ma question voir ci-dessous ... – Nicolas

1

j'ai découvert!

solution

est de prolonger la HTMLEditorKit en substituant la
getViewFactory dans la classe javax.swing.text.html.HTMLEditorKit puis réécrire dans la ImageViewclass.java la méthode de chargelmage pour supporter des images codées base64!

1

Enfin, j'ai également découvert où je dois redéfinir, méthode "loadimage". Je devrais ajouter le flux conditionnel de [src = "foo"] pour charger l'image, serait juste le lien de l'image ou les données d'image elle-même. Maintenant, tout ce que j'écrirais "JTextPane.setEditorKit (new MyExtendedHtmlEditorKit());".

Cependant, mon problème est ici. la méthode existe "ImageViewer.class create() [HtmlFactory.class (classe interne statique) [HtmlEditorKit.class]]> void loadImage() [ImageViewer.class]" C'est imbriqué profond, ces classes ont de nombreux objets invisibles depuis la classe extérieure et beaucoup de définition statique. Donc, cela signifie que je dois construire un arbre entier à partir de racines pour juste choisir une feuille sur le dessus de la branche. Je ne peux pas éditer directement Java VM runtime, le compiler et le distribuer. Je pense que c'est IMPOSSIBLE, au moins c'est sûr pour moi!

Questions connexes