J'ai lu les outils de développement OS X Java, afin de rendre mon application plus "native" avec le système d'exploitation. J'ai trouvé quelque chose d'intéressant dans ce section particulier. (Souligné par l'auteur)Comment Java charge-t-il les NSImages natifs?
Pour charger un fichier de résolution indépendant tiff, icns, ou pdf du dossier Ressources de votre paquet d'applications dans votre application Java, utilisez la méthode
getImage()
dejava.awt.Toolkit
. La chaîne que vous passez engetImage()
est de la forme"NSImage://MyImage"
. N'incluez pas l'extension de fichier de l'image. Sachez également que le moteur de rendu Sun 2D est désactivé lorsque le facteur d'échelle de l'interface utilisateur n'a pas la valeur 1.0. Utilisez le moteur de rendu Quartz pour que vos images évoluent en douceur.
Être familier avec javax.imageio
, cela vient comme une surprise complète, que je ne connaissais aucun autre moyen de charger d'autres types de fichiers en images. Surtout avec une plate-forme obsolète et absolument pas de support pour les fichiers tels que .tiff
. Par exemple, un test rapide sur mon ordinateur me donne ceci:
Supported read formats: [jpg, bmp, gif, png, wbmp, jpeg]
Supported write formats: [jpg, bmp, gif, png, wbmp, jpeg]
'JPEG' reader: com.sun.imageio[email protected]
'JPEG' reader: [email protected]
J'ai essayé de charger une image simple .tiff
et testé ceci:
static Image n; public static void main(String[] args) { JFrame f = new JFrame(); JPanel p = new JPanel() { @Override public void paintComponent(Graphics graphics) { graphics.drawImage(n, 0, 0, null); } } f.add(p); n = Toolkit.getDefaultToolkit().getImage(("/Users/zinedine/Desktop/test_image.tiff"); f.setVisible(true) }
Il donne rien:
J'ai réessayé: Cette fois-ci, en ajoutant l'image dans le dossier de base de mon projet java, et en tapant ceci dans une chaîne: "NSImage://test_image.tiff"
. Comme tout ce que je fais, ça ne marche pas.
Cependant, si je change ma chaîne de chemin de fantaisie à un NSImage un, comme "NSImage://NSApplicationIcon"
...
Il fonctionne. J'ai fait une recherche rapide de NSImage, et j'en ai trouvé un. Il semble que le type de fichier pour ces images est .png
. C'est assez dérangeant, car je m'attendais à ce qu'une image correcte en sorte. Rappelez-vous, je m'attendais aussi à quelque chose: si elle attend des arguments de la forme "NSImage://something"
, alors il pourrait simplement ignorer tout autre chose.
De toute évidence, j'ai quelques questions:
Comment la boîte à outils charger l'image? Si je tente de charger une image
.tiff
de mon bureau, ce que je reçois si je l'appelle.toString()
:[email protected] // Also can't be cast to java.awt.BufferedImage
-ce que les lecteurs (et écrivains le cas échéant) partie d'une API publique? En d'autres termes, je peux appeler quelque chose à charger mon fichier
.tiff
dans unImage
(que je peux ensuite jeté dans un `BufferedImage?Et là encore, si les lecteurs/écrivains font partie de l'API, pourquoi n » t le paquet
javax.imageio
les localiser?
Cela peut ressembler à une poignée, (oui je suis désolé pour ruiner votre journée sur cette question), mais pour moi, cela ressemble prévu, mais en même temps un comportement erroné. Marques bonus: Y a-t-il une API d'imagerie conviviale (c'est-à-dire Open Source) (pas le JAI) qui peut traiter les fichiers .tiff
(et autres)?
Qu'est-ce qui est ??? Maîtriser! Tu es revenu!! – Zizouz212