Ho letto gli strumenti di sviluppo OS X Java, al fine di rendere la mia applicazione più "nativa" con il sistema operativo. Ho trovato qualcosa di interessante in questo particolare section. (Sottolineatura mia)In che modo Java carica NSImages nativi?
Per caricare un tiff, ICNS, o pdf di file indipendente dalla risoluzione dalla cartella Risorse del proprio bundle dell'applicazione nella vostra applicazione Java, utilizzare il metodo di
java.awt.Toolkit
getImage()
. La stringa passata ingetImage()
ha il formato"NSImage://MyImage"
. Non includere l'estensione del file dell'immagine. Tenere presente inoltre che il renderer 2D di Sun è disabilitato quando il fattore di scala dell'interfaccia utente non ha un valore di 1.0. Usa il renderer Quartz in modo che le tue immagini si adattino senza intoppi.
Conoscere javax.imageio
, questo si presenta come una completa sorpresa, come non avevo conosciuto nessun altro modo per caricare altri tipi di file in immagini. Soprattutto con una piattaforma obsoleta e assolutamente nessun supporto per file come .tiff
. Ad esempio, un test rapido sul mio computer mi dà questo:
Supported read formats: [jpg, bmp, gif, png, wbmp, jpeg]
Supported write formats: [jpg, bmp, gif, png, wbmp, jpeg]
'JPEG' reader: [email protected]
'JPEG' reader: [email protected]
ho cercato di caricare un'immagine semplice .tiff
e testato questo fuori:
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) }
Produce nulla:
Ho provato di nuovo: questa volta, aggiungendo l'immagine nella cartella di base del mio progetto java e digitandola come una stringa: "NSImage://test_image.tiff"
. Come tutto ciò che faccio, non funziona.
Tuttavia, se cambio la mia stringa di percorso di fantasia per un NSImage uno, come ad esempio "NSImage://NSApplicationIcon"
...
Funziona. Ho fatto una rapida ricerca di Spotlight per NSImage e ne ho trovato uno. Sembra che il tipo di file per queste immagini sia .png
. Questo è un po 'inquietante, dal momento che mi aspettavo che uscisse un'immagine corretta. Intendiamoci, me lo aspettavo anche io: se si aspetta argomenti del modulo "NSImage://something"
, allora potrebbe semplicemente ignorare qualsiasi altra cosa.
Ovviamente, ho un paio di domande:
Come funziona il Toolkit caricare l'immagine? Se provo a caricare un'immagine
.tiff
dal mio desktop, questo è ciò che ottengo se chiamo.toString()
:[email protected] // Also can't be cast to java.awt.BufferedImage
Sono i lettori (e gli scrittori se presenti) parte di un'API pubblica? In altre parole, posso chiamare qualcosa per caricare il mio file
.tiff
in unImage
(che posso poi gettato in un `BufferedImage?E poi di nuovo, se i lettori/scrittori sono parte della API, perché doesn' il pacchetto
javax.imageio
li individua?
Questo può apparire come un pugno, (sì mi dispiace per aver rovinato la giornata su questa questione), ma a me, questo appare come previsto, ma allo stesso comportamento erroneo tempo. Segni di bonus: Esiste una API di immagini amichevole (cioè Open Source) (non la JAI) in grado di elaborare i file .tiff
(e altri)?
Che cosa è ??? Maestro! Sei tornato !! – Zizouz212