2010-04-29 3 views
3

Возможно ли отобразить зашифрованное изображение base64 в JTextPane?base64 image в JTextPane

Вот мой код

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: Я переформатировал ваш вопрос, не могли бы вы проверить правильность источника изображения? –

+0

Да, это правильно, спасибо. – Nicolas

ответ

1

То, что вы должны сделать, это разобрать Base64 кодированное изображение в массив байт, а затем загрузить изображение с помощью ByteArrayIn, putStream используя этот массив байт.

В качестве примера, для декодирования Base64, вы можете использовать javax.xml.bind.DatatypeConverter#parseBase64Binary

+0

// ok спасибо, я использовал это: public static byte [] decode (String str) { byte [] bt = null; try { sun.misc.BASE64 Декодер декодера = новый sun.misc.BASE64Decoder(); bt = decoder.decodeBuffer (str); } catch (IOException e) { e.printStackTrace(); } return bt; } // а затем byte [] parseImg = f.decode (texte); ImageIcon image = new ImageIcon (parseImg, "asd"); jTextPane.insertIcon (изображение); // но он не выплескивает изображение. Не могли бы вы мне помочь? – Nicolas

+0

Ну, без дополнительной информации вам будет сложно помочь. Во всяком случае, поскольку нет никакого исключения, я думаю, что декодер Base64 работал нормально. Как следствие, проблема возникает из создания образа изображения. Согласно документации конструктора ImageIcon, iamge должен содержать «поддерживаемый формат изображения, такой как GIF, JPEG или (с 1,3) PNG« Это ваш случай? – Riduidel

+0

благодарю вас за информацию, я закончил свой вопрос, см. Ниже ... – Nicolas

1

Я узнал!

решения является продлить HTMLEditorKit переопределения
getViewFactory в классе javax.swing.text.html.HTMLEditorKit затем переписать в ImageViewclass.java метод LoadImage для поддержки изображений в формате base64!

1

Наконец-то я также узнал, где мне нужно переопределить метод «loadimage». Я должен добавить условный поток [src = "foo"] для загрузки изображения, это будет только ссылка на изображение или данные изображения. Теперь все, что я написал «JTextPane.setEditorKit (новый MyExtendedHtmlEditorKit());».

Однако моя проблема здесь. существует метод «ImageViewer.class create() [HtmlFactory.class (статический внутренний класс) [HtmlEditorKit.class]]> void loadImage() [ImageViewer.class]" Это глубоко вложенное, в этом классе есть много объектов, невидимых извне класса и многие статические определения. Таким образом, это означает, что я должен построить целое дерево из корней, чтобы просто выбрать лист на вершине ветки. Я не могу напрямую редактировать время выполнения Java VM, компилировать и распространять его. Я думаю, что это НЕВОЗМОЖНО, по крайней мере, это точно для меня!