Swing & Batik: Créer une ImageIcon partir d'un fichier SVG?
Bref, je suis à la recherche d'un moyen de faire une ImageIcon partir d'un fichier SVG en utilisant le batik bibliothèque. Je ne veux pas avoir de raster au format SVG pour le disque tout d'abord, je veux juste être en mesure de tirer une svg de la jar fichier et de la terre comme un élément de l'INTERFACE utilisateur.
Je me sens comme cela devrait être assez facile, mais le batik javadoc ne sont pas à me dire ce que je dois savoir.
(Pourquoi batik? Eh bien, nous sommes déjà à l'utiliser, afin de ne pas avoir à exécuter une autre bibliothèque passé juridique.)
InformationsquelleAutor Electrons_Ahoy | 2010-03-22
Vous devez vous connecter pour publier un commentaire.
C'est vraiment très facile, juste pas très intuitive.
Vous avez besoin d'étendre
ImageTranscoder
. Dans lecreateImage
méthode que vous allouez uneBufferedImage
, il en cache comme une variable de membre et de le retourner. LewriteImage
méthode est vide. Et vous aurez besoin d'ajouter un getter pour récupérer leBufferedImage
.Il ressemblera à quelque chose comme ceci:
Maintenant, pour créer une image que vous créez une instance de votre transcoder et passer la largeur et la hauteur désirées par la mise en
TranscodingHints
. Enfin, vous transcode d'un TranscoderInput à une cible null. Puis l'appel de la lecture sur votre transcoder pour obtenir l'image.L'appel ressemble à quelque chose comme ceci:
Simple, non? (Ouais, bon. Seulement m'a fallu 2 semaines pour comprendre cela. Soupir.)
J'ai simplement suivi du Devon approche avec Batik-1.7
Toutefois, afin de le faire fonctionner, j'ai dû faire les ajouts suivants les conseils de l'objet:
Semble que quelque chose a été mis à jour dans le batik est XMLAbstractTranscoder( http://svn.apache.org/repos/asf/xmlgraphics/batik/tags/batik-1_7/sources/org/apache/batik/transcoder/XMLAbstractTranscoder.java) avec la version 1.7.
Si jamais vous ne souhaitez plus d'inclure la dépendance à l'égard de Batik dans votre application, vous pouvez transformer un fichier SVG directement dans Java2D avec le Flamingo SVG Transcoder:
http://ebourg.github.com/flamingo-svg-transcoder
Il génère icône de classes à peu près équivalent à la taille d'un comprimé fichier SVG. Le code généré n'a aucune dépendance externe.
Éviter la transmission des dom paramètres :
transcoder.setTranscodingHints((Map<?, ?>) hints);
J'ai essayé d'utiliser du Devon et de Jean suggestions, qui a presque fonctionné pour moi. J'ai dû faire quelques réglages comme suit, n'hésitez pas à utiliser: