要将来自应用程序包资源文件夹中的分辨率无关的 tiff、icns 或 pdf 文件加载到您的Java应用程序中,请使用
java.awt.Toolkit
的getImage()
方法。您传递到getImage()
的字符串形式为"NSImage://MyImage"
。不要包含图像的文件扩展名。还要注意,当用户界面比例因子没有值为1.0时,Sun 2D 渲染器会被禁用。请使用Quartz渲染器,以使图像平滑缩放。熟悉
javax.imageio
后,这让我完全惊讶,因为我不知道有其他加载其他文件类型的图像的方法。特别是在过时的平台上,绝对没有支持.tiff
等文件。例如,在我的电脑上进行快速测试会得到如下结果:Supported read formats: [jpg, bmp, gif, png, wbmp, jpeg]
Supported write formats: [jpg, bmp, gif, png, wbmp, jpeg]
'JPEG' reader: com.sun.imageio.plugins.jpeg.JPEGImageReader@5e9f23b4
'JPEG' reader: com.sun.imageio.plugins.jpeg.JPEGImageWriter@378fd1ac
我尝试加载一个简单的.tiff
图像并测试了一下:
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) }
没有任何结果:
我又试了一遍:这次,将图像添加到java项目的基本文件夹中,并将其键入为字符串:"NSImage://test_image.tiff"
。像我做的每件事情一样,它不起作用。
然而,如果我将花哨的路径字符串更改为NSImage类型的字符串,例如"NSImage://NSApplicationIcon"
……
它可以工作。我快速搜索了一下NSImage,找到了一个。看起来这些图像的文件类型是.png
。这有点令人不安,因为我期望能得到一个适当的图像。请注意,我也有这样的期望:如果它期望以"NSImage://something"
的形式接收参数,那么它可能会忽略其他任何内容。
显然,我有几个问题:
How does the Toolkit load the image? If I try to load a
.tiff
image from my desktop, this is what I get if I call.toString()
:sun.awt.image.ToolkitImage@25f38edc // Also can't be cast to java.awt.BufferedImage
Are the readers (and writers if any) part of a public API? In other words, can I call something to load my
.tiff
file into anImage
(which I can then cast into a `BufferedImage?And then again, if the readers/writers are part of the API, why doesn't the
javax.imageio
package locate them?
这看起来可能有些复杂(是的,我很抱歉让你在这个问题上有些困扰),但对我而言,这似乎是预期的,但同时也是错误的行为。额外加分:是否有任何友好(即开源)的图像API(不是JAI)可以处理.tiff
文件(和其他文件)?