Czytałem narzędzia programistyczne Java X OS X, aby moja aplikacja była bardziej "natywna" w systemie operacyjnym. Znalazłem coś interesującego w tym konkretnym section. (Kopalnia nacisk)W jaki sposób Java ładuje natywne oprogramowanie NSImages?
Aby załadować niezależne od rozdzielczości TIFF, icns, lub pdf plik z folderu Resources swojego pakietu aplikacji do aplikacji Java, należy użyć metody
java.awt.Toolkit
getImage()
. Ciąg znaków, który przekazujesz dogetImage()
, ma postać"NSImage://MyImage"
. Nie dołączaj rozszerzenia pliku obrazu. Należy także pamiętać, że renderer Sun 2D jest wyłączony, gdy współczynnik skali interfejsu użytkownika nie ma wartości 1,0. Użyj renderera Quartz, aby obrazy były skalowane płynnie.
Znany z javax.imageio
, jest to kompletne zaskoczenie, ponieważ nie znałem żadnego innego sposobu na załadowanie innych typów plików do obrazów. Zwłaszcza z przestarzałą platformą i absolutnie bez wsparcia dla plików takich jak .tiff
. Na przykład, szybkie testy na moim komputerze daje mi to:
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]
Próbowałem ładowania prosty .tiff
obraz i przetestowane na to uwagę:
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) }
To daje nic:
Próbowałem ponownie: tym razem, dodając obraz do folderu podstawowego mojego projektu java, i wpisałem to jako ciąg znaków: "NSImage://test_image.tiff"
. Jak wszystko, co robię, to nie działa.
Jednak Jeśli zmienię mojego fantazyjny ciąg ścieżki do NSImage jednym, takich jak "NSImage://NSApplicationIcon"
...
To działa. Zrobiłem szybkie wyszukiwanie w centrum uwagi NSImage i znalazłem je. Wygląda na to, że typ pliku dla tych obrazów to .png
. Jest to niepokojące, ponieważ spodziewałem się, że powstanie z niego właściwy obraz. Pamiętaj, ja też się tego spodziewałem: jeśli oczekuje argumentów w postaci "NSImage://something"
, to może po prostu zignorować cokolwiek innego.
Oczywiście, mam kilka pytań:
jaki sposób Toolkit załadować zdjęcie? Gdy próbuję załadować
.tiff
obraz z mojego komputera, to co mam, jeśli zadzwonię.toString()
:[email protected] // Also can't be cast to java.awt.BufferedImage
Czy czytelnicy i pisarze (jeśli w ogóle) część publicznego API? Innymi słowy, można wywołać coś załadować mój plik
.tiff
się naImage
(który można następnie wrzucony do `BufferedImage?a następnie ponownie, jeśli czytelników/pisarzy są częścią API, dlaczego nie robi” t zlokalizować je w pakiecie
javax.imageio
?
To może wyglądać jak garść, (tak mi przykro za zrujnowanie swój dzień na to pytanie), ale dla mnie to wygląda jak oczekiwano, ale w tym samym czasie błędnego zachowania. Znaki premiowe: Czy istnieje przyjazny (tj. Open Source) obrazowy api (nie JAI), który może przetwarzać pliki .tiff
(i inne)?
Co? Mistrz! Wróciłeś !! – Zizouz212