3

base64 で暗号化されたイメージを 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);
4

3 に答える 3

1

最後に、「loadimage」メソッドをオーバーライドする必要がある場所も見つけました。[src = "foo"]の条件付きフローを追加して画像を読み込む必要があります。これは、画像のリンクまたは画像データ自体です。さて、私が書くのは「JTextPane.setEditorKit(new MyExtendedHtmlEditorKit());」だけです。

しかし、私の問題はここにあります。メソッドが存在します"ImageViewer.classcreate()[HtmlFactory.class(s​​tatic inner class)[HtmlEditorKit.class]]> void loadImage()[ImageViewer.class]"これは深くネストされており、これらのクラスには外部クラスから見えない多くのオブジェクトがあり、多くの静的定義。つまり、これは、枝の上にある葉を選ぶだけで、根から木全体を構築する必要があることを意味します。Java VMランタイムを直接編集して、コンパイルして配布することはできません。これは不可能だと思います、少なくとも私にとっては確かです!

于 2011-03-09T10:45:59.827 に答える
1

あなたがしなければならないことは、Base64 でエンコードされた画像をバイト配列に解析し、そのバイト配列を使用して ByteArrayIn,putStream を使用して画像をロードすることです。

例として、Base64 をデコードするには、 javax.xml.bind.DatatypeConverter#parseBase64Binaryを使用できます。

于 2010-04-29T09:33:59.200 に答える
1

分かった!

解決策は、クラス javax.swing.text.html.HTMLEditorKit の getViewFactory をオーバーライドして HTMLEditorKit を拡張
し、ImageViewclass.java で loadImage メソッドを書き直して、base64 でエンコードされた画像をサポートすることです。

于 2010-05-06T12:45:08.113 に答える